nginx:设置SSL反向代理(负载平衡SSL代理)
时间:2020-01-09 10:40:29 来源:igfitidea点击:
反向代理是安装在服务器网络中的代理服务器。
通常,反向代理用于Web服务器(如Apache,IIS和Lighttpd)的前面。
如何将Nginx Web服务器设置为SSL反向代理?
当您拥有多个后端Web服务器时,可以通过反向代理来完成加密/SSL加速。
Nginx可以充当SSL加速软件。
它具有以下优点:
OpenSSL创建私钥
要创建CSR(证书签名请求):
# openssl req -new -key theitroad.com.key -out theitroad.com.csr
请输入您要与证书关联的域名。
例如,对于命令名称,我输入theitroad.com,将使用https://theitroad.com/。
如何删除密码? (可选的)
您可以删除密码,以便nginx可以在启动时启动而无需输入密码。
输入以下命令
# cp theitroad.com.key theitroad.com.key.bak # openssl rsa -in theitroad.com.key.bak -out theitroad.com.key
最后,您应该看到三个文件,如下所示(注意Ive以Hyman用户身份创建了所有文件,然后将lb0和lb1服务器移至/usr/local/ngnix/conf/ssl /目录):
# ls -l
生成实际的自签名SSL证书
# openssl x509 -req -days 365 -in theitroad.com.csr -signkey theitroad.com.key -out theitroad.com.crt
如何将SSL证书文件复制到lb1?
您需要将这些文件复制到lb1,执行:
# ssh root@lb1 mkdir /usr/local/ngnix/conf/ssl # rsync -av /usr/local/ngnix/conf/ssl/* root@lb1:/usr/local/ngnix/conf/ssl/
将Nginx配置为SSL反向代理(lb0和lb1)
编辑nginx.conf,输入(您需要编辑lb0和lb1上的文件):
# vi /usr/local/ngnix/conf/nginx.conf
编辑/追加如下:
server { ### server port and name ### listen 192.54.1.1:443; ssl on; server_name theitroad.com; ### SSL log files ### access_log logs/ssl-access.log; error_log logs/ssl-error.log; ### SSL cert files ### ssl_certificate ssl/theitroad.com.crt; ssl_certificate_key ssl/theitroad.com.key; ### Add SSL specific settings here ### ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; keepalive_timeout 60; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ### We want full access to SSL via backend ### location / { proxy_pass http://theitroad; ### force timeouts if one of backend is died ## proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; ### Set headers #### proxy_set_header Accept-Encoding ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ### Most PHP, Python, Rails, Java App can use this header ### #proxy_set_header X-Forwarded-Proto https;## #This is better## proxy_set_header X-Forwarded-Proto $scheme; add_header Front-End-Https on; ### By default we don't want to redirect it #### proxy_redirect off; }
保存并关闭文件。
重新加载nginx:
# /usr/local/nginx/sbin/nginx -t # /usr/local/nginx/sbin/nginx -s reload
验证端口是否打开:
# netstat -tulpn | grep :443
如何从Shell提示符下测试和调试SSL证书?
使用openssl命令,如下所示:
$ openssl s_client -connect theitroad.com:443
或者最好使用以下命令:
$ openssl s_client -connect theitroad.com:443 -CApath /usr/share/ssl-cert/ -servername theitroad.com
如何缓存公用文件?
编辑nginx.conf并添加以下内容以缓存常见文件:
location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ { proxy_buffering on; proxy_cache_valid 200 120m; expires 864000; }
保存并关闭文件。
重新加载nginx:
# nginx -s reload