Nginx對(duì)Https的反向代理
使用Nginx進(jìn)行反向代理的時(shí)候蟹略,對(duì)于正常的http蛾默;流量使用 location 塊并且配置 proxy_pass 轉(zhuǎn)發(fā)即可粪躬,但是如果是https的流量,使用Nginx進(jìn)行反向代理的時(shí)候殿托,直接使用 proxy_pass 會(huì)出現(xiàn)各種報(bào)錯(cuò)的情況霹菊,包括不限于:
- 502 Bad Getway
- ERR_SSL_PROTOCOL_ERROR
- ERR_CONNECTION_RESET
我本身遇到的ERR_SSL_PROTOCOL_ERROR錯(cuò)誤比較多,這是因?yàn)樵谂渲肗ginx的時(shí)候支竹,對(duì)于443端口本身的偵聽(tīng)沒(méi)有帶上 ssl 關(guān)鍵字旋廷,所以會(huì)報(bào)SSL協(xié)議錯(cuò)誤,但是如果加上ssl礼搁,沒(méi)有給證書(shū)位置饶碘,也是不行;
對(duì)于轉(zhuǎn)發(fā)到8080端口馒吴,如果配置不對(duì)扎运,會(huì)出現(xiàn)502 Bad Getway:
- proxy_pass后邊的要寫(xiě)IP地址,不能寫(xiě)域名,否則還要解決域名解析的問(wèn)題,有據(jù)稱(chēng)如果寫(xiě)localhost的叼丑,訪(fǎng)問(wèn)速度會(huì)變慢,是因?yàn)樾枰L(fǎng)問(wèn)host文件解析localhost
- 響應(yīng)8080端口的server塊负拟,也要注意,也要寫(xiě)成偵聽(tīng)ssl篮赢,配置好證書(shū)位置
P.S. 如果因?yàn)榉聪虼恚罩緝?nèi)部都是127.0.0.1的訪(fǎng)問(wèn)琉挖,可以把日志設(shè)置寫(xiě)到反向代理的那個(gè)server塊中启泣,這樣日志就會(huì)是正常ip了。
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ***.com;
ssl_certificate ***.pem;
ssl_certificate_key ***.pem;
location / {
proxy_pass https://127.0.0.1:8080$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
對(duì)于 location 代碼塊中示辈,如果反向代理的服務(wù)有上傳業(yè)務(wù)寥茫,需要注意的是需要在location代碼塊中,或者需要的限定域中填寫(xiě)上
client_max_body_size 64M;
這樣nextcloud上傳大文件就不會(huì)莫名報(bào)錯(cuò)矾麻。