Nginx从入门到入土
Nginx從入門到入土
Rewrite 規(guī)則
Rewrite規(guī)則可以實(shí)現(xiàn)對url的重寫,以及重定向
指令語法:rewrite regex replacement [flag];
regex : 是代表要匹配的正則表達(dá)式,可以通過正則表達(dá)式提取變量
replacement : 要替換的url地址
flag : 是我們進(jìn)行完替換之后,要進(jìn)行的操作
常用正則表達(dá)式
| \ | 將后面接著的字符標(biāo)記為一個(gè)特殊字符或者一個(gè)原義字符或一個(gè)向后引用 |
| ^ | 匹配輸入字符串的起始位置 |
| $ | 匹配輸入字符串的結(jié)束位置 |
| * | 匹配前面的字符零次或者多次 |
| + | 匹配前面字符串一次或者多次 |
| ? | 匹配前面字符串的零次或者一次 |
| . | 匹配除“\n”之外的所有單個(gè)字符 |
| (pattern) | 匹配括號(hào)內(nèi)的pattern |
flag參數(shù)
| last | 本條規(guī)則匹配完成后繼續(xù)向下匹配新的location URI規(guī)則 |
| break | 本條規(guī)則匹配完成后終止,不在匹配任何規(guī)則 |
| redirect | 返回302臨時(shí)重定向 |
| permanent | 返回301永久重定向 |
應(yīng)用舉例重寫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;}說明:()內(nèi)為提取的變量,第一個(gè)提取的變量是$1
客戶端真實(shí)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;如何防止偽造
網(wǎng)上常見nginx配置ip請求頭
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
風(fēng)險(xiǎn): 用戶可以通過自己設(shè)置請求頭來偽造ip,比如用戶在發(fā)起http請求是自己測試請求頭x-forwarded-for:192.168.0.151。那么服務(wù)器通過x-forwarded-for獲取到的第一個(gè)ip就是用戶偽造的ip。
防止偽造方案:
情況1: 在只有1層nginx代理的情況下,設(shè)置nginx配置“proxy_set_header X-Forwarded-For remoteaddr;”。(此時(shí)remote_addr;”。(此時(shí)remotea?ddr;”。(此時(shí)remote_addr獲取的是用戶的真是ip)
情況2:在有多層反向代理的情況下,
? 1)設(shè)置“最外層”nginx配置和情況1一樣“proxy_set_header X-Forwarded-For $remote_addr;”。
? 2)除了“最外層”之外的nginx配置“proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;”。
這樣就防止了用戶通過偽造請求頭來偽造真實(shí)ip。后臺(tái)只需要從x-forwarded-for請求頭中取出第一個(gè)ip就是用戶的真實(shí)ip。后面如果有多個(gè)ip,就是反向代理的ip
同理:X-Real-IP也差不多。
不同的是當(dāng)只有1層nginx代理情況下只需配置“proxy_set_header X-Real-IP $remote_addr;”即可。
當(dāng)有多層反向代理時(shí),只在最外層代理設(shè)置“proxy_set_header X-Real-IP $remote_addr;”,如果在非最外層設(shè)置,則獲取到的是反向代理機(jī)器的ip
總結(jié)
以上是生活随笔為你收集整理的Nginx从入门到入土的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fota升级失败小结(recovery.
- 下一篇: nextcloud 安装并优化