Nginx从入门到入土
Nginx從入門到入土
Rewrite 規則
Rewrite規則可以實現對url的重寫,以及重定向
指令語法:rewrite regex replacement [flag];
regex : 是代表要匹配的正則表達式,可以通過正則表達式提取變量
replacement : 要替換的url地址
flag : 是我們進行完替換之后,要進行的操作
常用正則表達式
| \ | 將后面接著的字符標記為一個特殊字符或者一個原義字符或一個向后引用 |
| ^ | 匹配輸入字符串的起始位置 |
| $ | 匹配輸入字符串的結束位置 |
| * | 匹配前面的字符零次或者多次 |
| + | 匹配前面字符串一次或者多次 |
| ? | 匹配前面字符串的零次或者一次 |
| . | 匹配除“\n”之外的所有單個字符 |
| (pattern) | 匹配括號內的pattern |
flag參數
| last | 本條規則匹配完成后繼續向下匹配新的location URI規則 |
| break | 本條規則匹配完成后終止,不在匹配任何規則 |
| redirect | 返回302臨時重定向 |
| permanent | 返回301永久重定向 |
應用舉例重寫url路徑
處理前:http://127.0.0.1:20001/rest/api/kernel
處理后:http://127.0.0.1:20001/api/kernel
location /rest {proxy_pass http://127.0.0.1:20001;proxy_connect_timeout 600;proxy_read_timeout 600;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' '*';add_header 'Access-Control-Allow-Headers' 'Authorization,AppInfo,Sign,X-Requested-With,*';if ($request_method = 'OPTIONS') {return 204;}rewrite "^/rest/(.*)$" /$1 break;}說明:()內為提取的變量,第一個提取的變量是$1
客戶端真實ip
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-Port $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;如何防止偽造
網上常見nginx配置ip請求頭
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
風險: 用戶可以通過自己設置請求頭來偽造ip,比如用戶在發起http請求是自己測試請求頭x-forwarded-for:192.168.0.151。那么服務器通過x-forwarded-for獲取到的第一個ip就是用戶偽造的ip。
防止偽造方案:
情況1: 在只有1層nginx代理的情況下,設置nginx配置“proxy_set_header X-Forwarded-For remoteaddr;”。(此時remote_addr;”。(此時remotea?ddr;”。(此時remote_addr獲取的是用戶的真是ip)
情況2:在有多層反向代理的情況下,
? 1)設置“最外層”nginx配置和情況1一樣“proxy_set_header X-Forwarded-For $remote_addr;”。
? 2)除了“最外層”之外的nginx配置“proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;”。
這樣就防止了用戶通過偽造請求頭來偽造真實ip。后臺只需要從x-forwarded-for請求頭中取出第一個ip就是用戶的真實ip。后面如果有多個ip,就是反向代理的ip
同理:X-Real-IP也差不多。
不同的是當只有1層nginx代理情況下只需配置“proxy_set_header X-Real-IP $remote_addr;”即可。
當有多層反向代理時,只在最外層代理設置“proxy_set_header X-Real-IP $remote_addr;”,如果在非最外層設置,則獲取到的是反向代理機器的ip
總結
以上是生活随笔為你收集整理的Nginx从入门到入土的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fota升级失败小结(recovery.
- 下一篇: Nginx+Tomcat集群环境搭建