1. 程式人生 > >nginx問題相關記錄

nginx問題相關記錄

nginx目前主要用來做反向代理和負載均衡,其實它也可以是一個web伺服器;

 

1、反向代理:

location /api/ {
proxy_next_upstream error timeout http_503 http_502 http_504;
proxy_pass http://myweb1-server/api/;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;

}

2、七層的負載均衡:

upstream web1 {
server 127.0.0.1:111 weight=1;
server 127.0.0.1:222 weight=1;
}
upstream web2 {
server 127.0.0.2:111 weight=1;
server 127.0.0.2:222 weight=6;
server 127.0.0.2:333 weight=7;
}


3、nginx中root與alias的區別:

1、root的處理結果是:root路徑+location路徑
alias的處理結果是:使用alias路徑替換location路徑

例如:location /a/{

                          root /data/www;

                         }

訪問http://dlgde.cn/a/page.html,root會對應到資源/data/www/a/page.html,也就是root路徑+location路徑;

而location /a/{

                          alias /data/www;

                         }

同樣請求http://dlgde.cn/a/page.html,請求資源查詢路徑是 /data/www/page.html,不管location怎默寫,都是去alias指定的路徑。

2其他區別:

  1. alias 只能作用在location中,而root可以存在server、http和location中。
  2. alias 後面必須要用 “/” 結束,否則會找不到檔案,而 root 則對 ”/” 可有可無 

詳情參考;

 

4、獲取客戶端的真實ip

跟proxy_set_header配置有關,具體參考

 

5、nginx手機跳轉設定,

加個條件判斷,是手機請求,就rewrite到手機相應的網址。例如:

location / {
if ($http_user_agent ~* "(Android|iPhone|iPod|Symbian|BlackBerry|Windows Phone|Mobile|J2ME)") {
rewrite ^ http:stage01.dlgde.cn permanent;
}
root /data/www/stage01/dlgde/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
expires 5;
}

6、nginx中的try_files 使用:

如5中提到的,這個指令,其作用是按順序檢查檔案是否存在,返回第一個找到的檔案或資料夾(結尾加斜線表示為資料夾),如果所有的檔案或資料夾都找不到,會進行一個內部重定向到最後一個引數。但最後一個一定不能為空,不然會進入死迴圈而報500的錯誤,參考

 

其他待記錄。。。