nginx代理https
Posted 哭泣的馒头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx代理https相关的知识,希望对你有一定的参考价值。
一、四层代理
准备后端证书且要与后端服务使用相同证书
http {
.......
}
stream
log_format proxy $remote_addr [$time_local]
$protocol $status $bytes_sent $bytes_received
$session_time "$upstream_addr"
"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time";
access_log /var/log/nginx/tcp-access.log proxy;
error_log /var/log/nginx/tcp-error.log warn;
upstream mail
server 10.99.1.117:443;
server
listen 443 ssl;
proxy_ssl_name mail.trusit.net;
#代理连接后端服务器证书
proxy_ssl on;
proxy_ssl_certificate ssh_key/mail.trusit.net.pem;
proxy_ssl_certificate_key ssh_key/mail.trusit.net.key;
#nginx代理颁发前段证书
ssl_preread on;
ssl_certificate ssh_key/server.pem;
ssl_certificate_key ssh_key/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
proxy_pass mail;
二、七层代理
使用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上传大文件就不会莫名报错。
以上是关于nginx代理https的主要内容,如果未能解决你的问题,请参考以下文章
简单测试nginx反向代理和负载均衡功能的操作记录-----https代理