作者: 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 是一個強大且靈活的伺服器,無論是用於靜態文件服務、反向代理還是負載平衡,它都能提供高效能且穩定的服務。