在LNMP(Linux+Nginx+MySQL+PHP)架構中,Nginx作為Web服務器,主要負責處理HTTP請求、轉發PHP請求至PHP-FPM、提供靜態文件服務等。以下是Nginx的具體配置步驟及關鍵說明:
根據Linux發行版選擇對應命令安裝:
sudo apt update && sudo apt install nginx -y
sudo yum install epel-release && sudo yum install nginx -y
安裝完成后,啟動Nginx并設置開機自啟:
sudo systemctl start nginx
sudo systemctl enable nginx
通過訪問服務器IP地址,確認Nginx默認頁面顯示正常。
虛擬主機用于托管多個域名/網站。Nginx通過sites-available(存放配置文件)和sites-enabled(存放啟用配置的符號鏈接)目錄管理虛擬主機。
以域名example.com
為例,創建配置文件:
sudo nano /etc/nginx/sites-available/example.com
寫入以下基礎配置(需根據實際情況調整):
server {
listen 80;
server_name example.com www.example.com; # 域名(可多個,空格分隔)
root /var/www/example.com; # 網站根目錄(需手動創建)
index index.php index.html index.htm; # 默認索引文件
# 靜態文件處理:嘗試匹配文件,不存在則返回404
location / {
try_files $uri $uri/ =404;
}
# PHP處理:轉發至PHP-FPM(關鍵配置)
location ~ \.php$ {
include snippets/fastcgi-php.conf; # 包含FastCGI參數
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # PHP-FPM socket路徑(需與PHP版本匹配)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 傳遞腳本路徑
include fastcgi_params; # 包含通用FastCGI參數
}
# 禁止訪問.htaccess等敏感文件
location ~ /\.ht {
deny all;
}
}
說明:
server_name
:必須與域名解析一致(需提前配置DNS解析至服務器IP);root
:網站文件的存儲路徑,需確保Nginx用戶(通常為www-data
)有讀寫權限;fastcgi_pass
:指向PHP-FPM的socket文件(路徑可通過sudo find / -name "*.sock"
查找)。創建符號鏈接,將配置文件鏈接至sites-enabled
目錄:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
測試配置文件語法(無錯誤則繼續):
sudo nginx -t
重載Nginx以應用更改:
sudo systemctl reload nginx
Nginx本身不處理PHP代碼,需通過PHP-FPM(FastCGI進程管理器)執行PHP腳本。
sudo apt install php-fpm php-mysql -y
sudo yum install php php-fpm php-mysqlnd -y
編輯PHP-FPM的pool配置文件(通常位于/etc/php/8.2/fpm/pool.d/www.conf
):
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
找到listen
指令,確保與Nginx中的fastcgi_pass
路徑一致(如unix:/var/run/php/php8.2-fpm.sock
)。
sudo systemctl restart php8.2-fpm
sudo systemctl enable php8.2-fpm
Nginx需連接MySQL存儲動態數據(如WordPress、Laravel等)。
sudo apt install mysql-server -y
sudo yum install mariadb-server -y
sudo mysql_secure_installation
按提示設置root密碼、移除匿名用戶、禁止root遠程登錄等。
登錄MySQL:
sudo mysql -u root -p
執行以下SQL命令:
CREATE DATABASE example_db; -- 創建數據庫
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'StrongPassword123'; -- 創建用戶
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost'; -- 授權
FLUSH PRIVILEGES; -- 刷新權限
EXIT;
允許HTTP(80)和HTTPS(443)流量(以UFW為例):
sudo ufw allow 'Nginx Full'
sudo ufw enable
使用Let’s Encrypt免費獲取SSL證書:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
按提示完成證書安裝,Nginx會自動配置HTTPS重定向。
http
塊中添加:gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
location
塊中添加:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public";
}
nginx.conf
的events
塊中,設置worker_connections
為1024(根據服務器內存調整)。/var/www/example.com
目錄下放置index.html
,訪問http://example.com
應顯示頁面內容;/var/www/example.com
目錄下創建info.php
,內容為<?php phpinfo(); ?>
,訪問http://example.com/info.php
應顯示PHP信息頁面(確認PHP-FPM聯動正常)。通過以上步驟,即可在LNMP環境中完成Nginx的基礎配置。根據實際需求,可進一步調整緩存策略、負載均衡、反向代理等功能。