作者: Hao
最後編輯日期: 2024-10-25
Nginx 介紹
Nginx 是一個高效能的 Web 伺服器和反向代理伺服器,因其高併發處理能力和穩定性,廣泛用於負載平衡、反向代理、靜態資源服務等場景。
基本概念
- Web 伺服器:Nginx 可以作為 Web 伺服器來處理靜態文件(如 HTML、CSS、JS、圖片等),並將動態請求轉發給後端應用伺服器(如 Node.js、PHP)。
- 反向代理:Nginx 可以代理用戶的請求,並將其轉發給後端的多個伺服器,實現負載平衡。
- 負載平衡:Nginx 可以在多個後端伺服器之間分配流量,提升網站的性能和可靠性。
- 緩存:Nginx 支持緩存靜態文件和反向代理的請求結果,減少後端伺服器的負擔,提高響應速度。
安裝 Nginx
在 Ubuntu 上安裝
sudo apt update
sudo apt install nginx
在 CentOS 上安裝
sudo yum install epel-release
sudo yum install nginx
Nginx 配置文件結構
Nginx 的主要配置文件位於 /etc/nginx/nginx.conf
,這是全域配置文件。配置文件中使用指令來設置伺服器行為,常見指令包括:
- http:HTTP 協議相關的配置。
- server:定義一個虛擬主機。
- location:設置 URL 路徑匹配的規則。
配置文件示例:
# 全域設定
user nginx;
worker_processes auto;
# HTTP 設定
http {
include mime.types;
default_type application/octet-stream;
# 日誌設置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 伺服器設置
server {
listen 80;
server_name example.com;
# 靜態文件位置
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 反向代理設定
location /api/ {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Nginx 常用配置範例
1. 配置靜態文件服務
設置 Nginx 來提供靜態文件服務,例如 HTML、CSS 和 JavaScript 文件:
server {
listen 80;
server_name mywebsite.com;
location / {
root /var/www/html;
index index.html;
}
}
2. 配置反向代理
將用戶的請求轉發給後端伺服器(例如在 http://localhost:3000
運行的應用):
server {
listen 80;
server_name mywebsite.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. 配置負載平衡
將流量分配到多個後端伺服器,以提升應用的穩定性和可擴展性:
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
server_name mywebsite.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
4. 設置 HTTPS
利用 Nginx 支持 HTTPS,加密與用戶的通信:
server {
listen 443 ssl;
server_name mywebsite.com;
ssl_certificate /etc/nginx/ssl/mywebsite.crt;
ssl_certificate_key /etc/nginx/ssl/mywebsite.key;
location / {
root /var/www/html;
index index.html;
}
}
常用 Nginx 指令
sudo systemctl start nginx
:啟動 Nginx。sudo systemctl stop nginx
:停止 Nginx。sudo systemctl restart nginx
:重啟 Nginx。sudo nginx -t
:檢查 Nginx 配置文件是否有錯誤。
Nginx 是一個強大且靈活的伺服器,無論是用於靜態文件服務、反向代理還是負載平衡,它都能提供高效能且穩定的服務。