2015年9月4日 星期五

Nginx 常用設定

Nginx 常用設定


設定檔: /etc/nginx/proxy_params

此設定檔為 Nginx 安裝後自動產生的, 是作 proxy 設定時常用到的一些參數, 目前只 include 使用, 不修改。檔案內容如下
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

設定檔: /etc/nginx/sites-available/default

Nginx 大部份的設定, 尤其是與 reverse proxy 相關的都在此檔案, 以下為一段與 WordPress、 HTTPS 和 proxy cache 相關的設定範例:
# Proxy cache 前置設定
# cache 目錄, cache temp 目錄, 1字元+2字元雙層目錄, cache 名稱及分配記憶體, 效期, 空間
proxy_cache_path /var/www/cache levels=1:2 keys_zone=mycache:10m inactive=1d max_size=1g;
proxy_temp_path /var/www/cache/tmp;

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        # 允許 HTTPS 連線
        listen 443 ssl;
        ssl_certificate         /etc/nginx/rex_ssl_key/cacert.pem;
        ssl_certificate_key     /etc/nginx/rex_ssl_key/privkey.pem;

        # 設定網站根目錄並加入 index.php 為主要的 index
        root /var/www/html;
        index index.php index.html index.htm;

        # 設定 Server Name 為 localhost, 因為沒有 domain name 又 IP 可能會變動
        server_name localhost;

        # Nginx 的預設 location 規則
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        # 所有 .php request 直接重新導向給 Apache 處理
        location ~ .php$ {
                proxy_pass http://localhost:8080;
                include proxy_params;
        }

        # 靜態資料 cache 設定
        location ~* .(js|css|jpg|jpeg|gif|png|ico|cur|svg)$ {
                proxy_pass http://localhost:8080;
                include proxy_params;

                proxy_cache mycache;
                proxy_cache_key $host$uri$is_args&args;
                proxy_cache_valid 200 304 10m;

                expires 30d;
        }

        # WordPress 的控制台程序目錄 wp-admin 若是直接丟給 Apache 處理變 wp-admin/
        # 會硬要在 URL 上加上 Apache 的 8080 port, 這樣會讓 WordPress 主程序認為
        # 和站台設定不一致而重導回主頁不予理會。
        # 所以解決方法就直接在 Nginx 這端將他 rewrite 成 wp-admin/
        location ~ ^(/wp[^/]*(?:/[^/]*)?/wp-admin)$ {
                rewrite (.*) $1/;
        }

        # WordPress 主頁根目錄(首頁文章列表、索引到的文章) 或根目錄之下(偽靜態固定網址、
        # 網誌網路子站) 的 request 因為要透過 WordPress 的 php 程序取得實際網址,
        # 所以直接導向給 Apache 處理
        location ~ (^/wp[^/]*/$|^/wp[^/]*/){
                proxy_pass http://localhost:8080;
                include proxy_params;
        }

其他:
因為 HTTPS 的協定在 LNAMP 的架構下我們是交給 Nginx 處理, 所以習慣在 /etc/nginx 的目錄下另建一個子目錄來存放 certificate key (公用可公開) 和 private key (系統用不可公開)

沒有留言:

張貼留言