自己的一个服务器因为想使用均衡负载,这样方便创建各种不同的服务器环境。
由于要开发小程序,所以要配置个https,研究了挺久的,这里大概写一下自己的一些配置总结。
均衡负载Https的配置,证书要配置的主nginx下,因为我用的是nginx转发到lnmpa下的容器,刚开始搞不清楚在哪里配置https证书。就是docker分容器下进行配置了https证书,但是没有成功还出现了400错误什么的。后来解决思路是直接新建一个映射服务器80和443端口的容器,并在这个容器上配置了https证书,配置成功。于是把配置的文件保存下来,用于之后配置均衡负载的分容器下。
之后,重新建了nginx转发主容器,映射服务器的80和443端口,再建分容器,把它的80和443端口映射到服务器的其它一些端口。
之后,在主nginx容器下配置upstream到对应的域名,并配置对应的域名,转发到分容器的443端口,可是用之前分容器配置好的https提示错误,于是就把分容器下的证书引用注释掉了,显示就正常,如果不是https访问域名就正常,但是是https访问是就出现了相关的一些错误。后来在主容器下的nginx的域名下配置了443和引用证书,显示400错误,出现的错误有
1、SSL_ERROR_RX_RECORD_TOO_LONG
这个是要在主nginx下域名配置下的listen 443后尾加上default ssl,这个错误就不再出现了。
2、400 Request Header Or Cookie Too Large。
这个问题是在location / 里的proxy_pass配置,把域名改成访问容器的443端口。这样就配好了。
主nginx的配置
upstream xxx.com {
server 12.15.1.1:10431;
}
server{
#listen 80;
listen 443 default ssl;
server_name xxx.com;
#ssl on;
ssl_certificate /etc/nginx/conf.d/SSL/www.xxx.com/www.xxx.com.pem;
ssl_certificate_key /etc/nginx/conf.d/SSL/www.xxx.com/www.xxx.com.key;
ssl_session_timeout 5m;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#ssl_prefer_server_ciphers on;
location / {
proxy_pass http://12.15.1.1:10431;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
分容器的nginx的域名配置文件
server
{
#listen 80;
listen 443;
server_name www.xxx.com;
index index.html index.htm index.php default.html default.htm default.php;
root /home/www/www.xxx.com;
#error_page 404 /404.html;
include proxy-pass-php.conf;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}location ~ .*\.(js|css)?$
{
expires 12h;
}location ~ /\.
{
deny all;
}access_log off;
}
来源:CSDN
作者:dehong
链接:https://blog.csdn.net/dehong/article/details/104572353