Nginx对Https的反向代理
使用Nginx进行反向代理的时候,对于正常的http;流量使用 location 块并且配置 proxy_pass 转发即可,但是如果是https的流量,使用Nginx进行反向代理的时候,直接使用 proxy_pass 会出现各种报错的情况,包括不限于:
- 502 Bad Getway
- ERR_SSL_PROTOCOL_ERROR
- ERR_CONNECTION_RESET
我本身遇到的ERR_SSL_PROTOCOL_ERROR错误比较多,这是因为在配置Nginx的时候,对于443端口本身的侦听没有带上 ssl 关键字,所以会报SSL协议错误,但是如果加上ssl,没有给证书位置,也是不行;
对于转发到8080端口,如果配置不对,会出现502 Bad Getway:
- proxy_pass后边的要写IP地址,不能写域名,否则还要解决域名解析的问题,有据称如果写localhost的,访问速度会变慢,是因为需要访问host文件解析localhost
- 响应8080端口的server块,也要注意,也要写成侦听ssl,配置好证书位置
P.S. 如果因为反向代理,日志内部都是127.0.0.1的访问,可以把日志设置写到反向代理的那个server块中,这样日志就会是正常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;
}
}
对于 location 代码块中,如果反向代理的服务有上传业务,需要注意的是需要在location代码块中,或者需要的限定域中填写上
client_max_body_size 64M;
这样nextcloud上传大文件就不会莫名报错。