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