要正確配置Nginx運行Laravel應(yīng)用,必須1.設(shè)置document root為public目錄;2.使用try_files實現(xiàn)URL重寫;3.配置PHP-FPM處理PHP文件;4.禁止訪問敏感文件和目錄。具體步驟為:首先將root設(shè)為/var/www/laravel/public以確保入口文件為public/index.php,避免暴露.env等敏感文件;接著在location /中使用try_files $uri $uri/ /index.php?$query_string實現(xiàn)前端控制器模式,將請求轉(zhuǎn)發(fā)給Laravel路由;然後配置location ~ \.php$塊,通過fastcgi_pass指向PHP-FPM套接字(如unix:/var/run/php/php8.2-fpm.sock),並設(shè)置SCRIPT_FILENAME為$realpath_root$fastcgi_script_name以避免符號鏈接問題;最後添加多個deny all規(guī)則阻止訪問.env、.git、~備份文件及storage、bootstrap等目錄。完整配置後需運行sudo nginx -t測試語法並重載Nginx服務(wù),同時在生產(chǎn)環(huán)境中應(yīng)啟用HTTPS、設(shè)置www-data權(quán)限並清除Laravel緩存以確保正常運行。
Configuring Nginx for a Laravel application is straightforward once you understand the key requirements: routing all requests through public/index.php
, securing sensitive files, and setting proper document root. Here's how to do it correctly.

? Set the Correct Root Directory
Laravel's entry point is the public/
folder. Your Nginx server block must point to this directory as the root.
server { listen 80; server_name your-domain.com; root /var/www/laravel/public; index index.php index.html index.htm; }
? Never point the root to the Laravel project root (where
artisan
is). That would expose sensitive files like.env
.
? Handle URL Rewriting (Front Controller Pattern)
Laravel uses the front controller pattern — all requests should be routed through public/index.php
. Use the try_files
directive to achieve this:
location / { try_files $uri $uri/ /index.php?$query_string; }
This tells Nginx:

- First, try serving the actual file or directory.
- If not found, pass the request to
index.php
with the query string intact (so Laravel can route it).
?? PHP-FPM Configuration
You need PHP-FPM to execute PHP files. Make sure PHP-FPM is installed and running (eg, PHP 8.1 or 8.2). Configure Nginx to pass .php
files to PHP-FPM:
location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # Adjust version as needed fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; }
? Using
$realpath_root
instead of$document_root
avoids path resolution issues with symlinks (eg, when usinggit
orenvoyer
).
? Block Access to Sensitive Files
Prevent direct access to Laravel-specific files and directories:
location ~ /\.(env|git|htaccess) { deny all; } location ~ ~$ { deny all; }
You can also explicitly block access to the storage
and bootstrap
directories:
location /storage/ { deny all; } location /bootstrap/ { deny all; }
? Full Example Configuration
server { listen 80; server_name your-domain.com; root /var/www/laravel/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(env|git|htaccess) { deny all; } location ~ ~$ { deny all; } location /storage/ { deny all; } }
After saving, test and reload Nginx:
sudo nginx -t sudo systemctl reload nginx
? Additional Tips
- Use HTTPS : Always enable SSL (via Let's Encrypt) in production.
- Set proper permissions :
sudo chown -R www-data:www-data /var/www/laravel/storage sudo chown -R www-data:www-data /var/www/laravel/bootstrap/cache
- Clear config cache if Laravel isn't responding:
php artisan config:clear php artisan route:clear
That's it. With this setup, your Laravel app will run securely and efficiently under Nginx. Just make sure PHP-FPM is running and file permissions are correct.
以上是如何為Laravel應(yīng)用程序配置NGINX?的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在Laravel中添加自定義驗證規(guī)則的方法有三種:使用閉包、Rule類和表單請求。 1.使用閉包適合輕量級驗證,如阻止用戶名為"admin";2.創(chuàng)建Rule類(如ValidUsernameRule)使復(fù)雜邏輯更清晰可維護;3.在表單請求中整合多個規(guī)則並集中管理驗證邏輯,同時可通過自定義messages方法或傳入錯誤信息數(shù)組來設(shè)置提示語,從而提升靈活性和可維護性。

Laravel應(yīng)用實現(xiàn)多語言支持的核心方法包括:設(shè)置語言文件、動態(tài)切換語言、翻譯URL路由及管理Blade模板中的翻譯鍵。首先,將各語言字符串組織在/resources/lang目錄下的對應(yīng)文件夾(如en、es、fr)中,並通過返回關(guān)聯(lián)數(shù)組定義翻譯內(nèi)容;2.通過\_\_()輔助函數(shù)調(diào)用翻譯鍵值,並使用App::setLocale()結(jié)合會話或路由參數(shù)實現(xiàn)語言切換;3.對於翻譯URL,可通過帶前綴的路由組分別為不同語言定義路徑,或動態(tài)映射語言文件中的路由別名;4.在Blade模板中保持翻譯鍵簡潔並

toworkeffectivelywithpivottablesinlaravel,firstAccessPivotDatausingwithPivot()orwithTimestamps(),thenupdateentrieswithupdatee XistingPivot(),ManageraliationShipsviadeTach()andsync(),andusecustompivotModelSwhenNeed.1.UseWithPivot()toincludespecificcol

laravelProvidesLeanAndFlexibleWayTosendificationsViamultiplipliplipliplikeMail,SMS,In-Appalerts,and-Appalerts,andPushNotifications.youdefineNotificationChannelsinthelsinthevia()MethodofanotificationClass,andimpecificementpecificementpecificementpecificemmethodssliketomail()

ServiceProvider是Laravel框架中用於註冊服務(wù)和初始化邏輯的核心機制,通過Artisan命令可創(chuàng)建自定義ServiceProvider;1.register方法用於綁定服務(wù)、註冊單例、設(shè)置別名等操作,不可調(diào)用尚未加載的其他服務(wù);2.boot方法在所有服務(wù)註冊完成後運行,用於註冊事件監(jiān)聽器、視圖合成器、中間件等依賴其他服務(wù)的邏輯;常見用途包括綁定接口與實現(xiàn)、註冊Facade、加載配置、註冊命令行指令和視圖組件;建議集中相關(guān)綁定於一個ServiceProvider中管理,並註意註冊

依賴注入在Laravel中通過服務(wù)容器自動處理類的依賴關(guān)係,無需手動new對象。其核心是構(gòu)造函數(shù)注入和方法注入,如控制器中自動傳入Request實例。 Laravel通過類型提示解析依賴,遞歸創(chuàng)建所需對象。綁定接口與實現(xiàn)可通過服務(wù)提供者使用bind方法,或singleton綁定單例。使用時需確保類型提示、避免構(gòu)造函數(shù)複雜化、謹慎使用上下文綁定,並理解自動解析規(guī)則。掌握這些可提升代碼靈活性與維護性。

Laravel性能優(yōu)化可通過四個核心方向提升應(yīng)用效率。 1.使用緩存機制減少重複查詢,通過Cache::remember()等方法存儲不常變化的數(shù)據(jù),降低數(shù)據(jù)庫訪問頻率;2.從模型到查詢語句進行數(shù)據(jù)庫優(yōu)化,避免N 1查詢、指定字段查詢、添加索引、分頁處理及讀寫分離,減少瓶頸;3.將耗時操作如郵件發(fā)送、文件導(dǎo)出放入隊列異步處理,利用Supervisor管理工作者並設(shè)置重試機制;4.合理使用中間件與服務(wù)提供者,避免複雜邏輯和不必要的初始化代碼,延遲加載服務(wù)以提升啟動效率。

在Laravel應(yīng)用中處理異常和記錄錯誤的核心方法包括:1.利用App\Exceptions\Handler類集中管理未處理異常,通過report()方法記錄或通知異常信息,例如發(fā)送Slack通知;2.使用Monolog配置日誌系統(tǒng),在config/logging.php中設(shè)置日誌級別與輸出方式,並在生產(chǎn)環(huán)境中啟用error及以上級別日誌,同時可在report()中結(jié)合上下文手動記錄詳細異常信息;3.自定義render()方法以返回統(tǒng)一的JSON格式錯誤響應(yīng),提升API前後端協(xié)作效率。這些步驟確
