# LNMP架構中Nginx如何配置虛擬主機
## 一、LNMP架構概述
LNMP代表Linux、Nginx、MySQL/MariaDB、PHP/Python/Perl,是一種流行的Web服務解決方案架構。與傳統的LAMP(Linux+Apache+MySQL+PHP)架構相比,LNMP具有以下優勢:
1. **高性能**:Nginx采用事件驅動架構,能輕松應對高并發請求
2. **低資源消耗**:內存占用遠低于Apache
3. **高穩定性**:單個服務崩潰不會影響整體服務
4. **靈活的配置**:配置文件簡潔明了,易于管理
在LNMP環境中,Nginx作為前端Web服務器,負責處理靜態請求并將動態請求轉發給PHP-FPM處理。
## 二、Nginx虛擬主機基礎概念
### 2.1 什么是虛擬主機
虛擬主機(Virtual Host)允許在一臺服務器上運行多個網站,每個網站有獨立的配置和域名,但對用戶表現為獨立的服務器。
### 2.2 Nginx虛擬主機類型
1. **基于域名的虛擬主機**:通過不同域名區分
```nginx
server {
listen 80;
server_name example.com;
# 配置內容
}
基于IP的虛擬主機:通過不同IP地址區分
server {
listen 192.168.1.1:80;
# 配置內容
}
基于端口的虛擬主機:通過不同端口區分
server {
listen 8080;
# 配置內容
}
典型Nginx虛擬主機配置包含以下核心部分:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
確保已安裝Nginx:
sudo apt-get install nginx # Ubuntu/Debian
sudo yum install nginx # CentOS/RHEL
創建網站目錄:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www
進入Nginx配置目錄:
cd /etc/nginx/sites-available # Ubuntu/Debian
cd /etc/nginx/conf.d # CentOS/RHEL
創建配置文件:
sudo nano example.com.conf
基礎配置模板:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.php index.html index.htm;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
創建符號鏈接(Ubuntu/Debian):
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
測試配置語法:
sudo nginx -t
重載Nginx:
sudo systemctl reload nginx
獲取SSL證書(以Let’s Encrypt為例):
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
自動生成的HTTPS配置: “`nginx server { listen 443 ssl; server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example.com/public_html; index index.php index.html index.htm;
# 其他配置… }
server { listen 80; server_name example.com www.example.com; return 301 https://\(host\)request_uri; }
#### 3.4.2 負載均衡配置
```nginx
upstream backend {
server 192.168.1.2:80 weight=5;
server 192.168.1.3:80;
server 192.168.1.4:80 backup;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
可能原因: - 目錄權限不正確 - Nginx用戶無訪問權限 - SELinux限制(CentOS/RHEL)
解決方案:
sudo chown -R nginx:nginx /var/www/example.com
sudo chmod -R 755 /var/www/example.com
# 對于SELinux
sudo chcon -R -t httpd_sys_content_t /var/www/example.com
可能原因: - PHP-FPM未正確配置 - location ~ .php$ 配置錯誤
檢查要點: 1. 確認PHP-FPM服務運行:
sudo systemctl status php7.4-fpm
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 或 127.0.0.1:9000
典型場景: HTTPS配置不當導致無限重定向
解決方案:
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
# 確保沒有額外的重定向規則
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
# 這會導致循環,應刪除
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
調整/etc/php/7.4/fpm/pool.d/www.conf
:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
server_tokens off;
location = /wp-admin {
deny all;
return 403;
}
location ~* \.(php|pl|cgi|py|asp)$ {
fastcgi_param HTTP_PROXY "";
fastcgi_param QUERY_STRING $query_string;
# 其他安全參數...
}
在LNMP架構中配置Nginx虛擬主機是搭建多網站環境的基礎技能。通過本文的詳細指導,您應該能夠:
實際生產環境中,建議結合監控工具(如Prometheus)和日志分析工具(如ELK)持續優化服務性能。定期檢查Nginx官方文檔獲取最新安全建議和功能更新。
注意:所有配置修改后都應執行
nginx -t
測試語法,并通過systemctl reload nginx
平滑重載配置,避免服務中斷。 “`
這篇文章總計約3850字,采用Markdown格式編寫,包含: 1. 完整的LNMP虛擬主機配置指南 2. 詳細代碼示例和解釋 3. 常見問題排查方案 4. 性能優化和安全建議 5. 層次分明的章節結構
可根據實際環境調整PHP版本、路徑等具體參數。建議保存為.md文件后用Markdown閱讀器查看格式效果。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。