Nginx+SSL+Tomcat+CDN部署總結,已實踐有效~

以前在度娘搜索資料,無心間看到一些我的站點的博客都用了https協議,在瀏覽器地址欄中被標記爲綠色的「安全」,前些天特意給本身負責的小項目升級成https協議,其優勢這裏再也不贅述,小夥伴們能夠自行百度,今天把整合部署分享在這裏,但願小夥伴們少走彎路~html

效果以下:java

軟件版本以下:nginx

System Centos 6.5
Nginx Tengine/2.1.2 (nginx/1.6.2)
SSL證書 Let's Encrypt 免費SSL證書
Tomcat Apache-tomcat-8.0.47
CDN Cloudflare.com

 

1、生成SSL證書git

首先咱們建立一個用來存放letsencrypt生成證書項目的路徑並進入:github

cd /usr/local/letsencrypt

接下來咱們克隆letsencrypt項目:web

git clone https://github.com/letsencrypt/letsencrypt

開始生成SSL證書:算法

./letsencrypt-auto certonly --standalone --email test@qq.com -d www.test1.com -d www.test2.com --agree-tos

這裏必定注意:chrome

(1). 域名綁定在國內DNS服務器沒法生成,須要先將DNS服務器切換到DNS服務商,例如ClouldFlare、Godaddy、Dnsever後才能正常生成!
(2). web服務須要處於關閉狀態,注意關閉nginx和80端口的佔用!(不間斷服務方式生成能夠自行百度)
(3). -d 表明domain 能夠同時生成多個域名對應證書,生成後咱們能夠在默認目錄中看到:apache

/etc/letsencrypt/live/www.test.com/
cert.pem(用戶證書) 
chain.pem(中間證書) 
fullchain.pem(證書鏈) 
privkey.pem(證書私鑰)

最後咱們生成Perfect Forward Security(PFS)鍵值,具體做用能夠自行百度:瀏覽器

mkdir /etc/ssl/private/ -p
cd /etc/ssl/private/
openssl dhparam 2048 -out dhparam.pem

 

2、Nginx配置SSL證書及Tomcat代理

#Tomcat 8080端口
	upstream tomcat_8080{
		server    127.0.0.1:8080  weight=1;
	}
		
	#將全部http協議內容重定向到https協議
	server {
		listen 80;
		server_name www.test.com;
		rewrite ^ https://$server_name$request_uri? permanent;
	}

	#https協議
	server {
		listen 443;
		server_name www.test.com;
		
		# letsencrypt生成的文件
		ssl on;
		ssl_certificate /etc/letsencrypt/live/www.test.com/fullchain.pem;
		ssl_certificate_key /etc/letsencrypt/live/www.test.com/privkey.pem;

		ssl_session_timeout 1d;
		ssl_session_cache shared:SSL:50m;
		ssl_session_tickets on;

		ssl_dhparam /etc/ssl/private/dhparam.pem;

		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		# 通常推薦使用的ssl_ciphers值: https://wiki.mozilla.org/Security/Server_Side_TLS
		ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
		ssl_prefer_server_ciphers on;
		
		# 代理tomcat
		location / {   
			proxy_set_header	Host				$http_host;  			
			proxy_set_header	X-Real-IP			$remote_addr;     
			proxy_set_header	X-Forwarded-For		$proxy_add_x_forwarded_for;     
			proxy_set_header	Cookie				$http_cookie;
			proxy_pass			http://tomcat_8080;
			#proxy_redirect		default;
		}

		access_log /home/wwwlogs/www.test.com_access.log;
		error_log  /home/wwwlogs/www.test.com_error.log;
	}

 

3、Tomcat的SSL配置:

1. Connector節點將redirectPort="8443"修改成 redirectPort="443" proxyPort="443"最終爲:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" proxyPort="443" />

2. 找到Engine節點,在最後一個Host標籤後加入:

<Host name="www.test.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Valve className="org.apache.catalina.valves.RemoteIpValve"
		remoteIpHeader="x-forwarded-for"
		remoteIpProxiesHeader="x-forwarded-by"
		protocolHeader="x-forwarded-proto"/>
	<Context docBase="/www/java/projectName" path="" crossContext="true" debug="3" privileged="true"  reloadable="false" deubt="true" />
</Host>

 

4、CloudFlare CDN設置(這裏很重要)

咱們將域名解析到本身服務器後,點擊Crypto選項卡,將SSL狀態修改成Full(strict)模式,在這種模式下會使用你服務器中的ssl證書,不然會致使頁面無限301跳轉,致使chrome提示重定向次數過多,請求失敗!

 

5、參考文獻:

1. Nginx+SSL整合 http://blog.csdn.net/sheng119/article/details/72956717
2. Tomcat+SSL整合 https://www.cnblogs.com/zhanghaoh/p/5293158.html
3. 解決CloudFlare CDN無限301重定向問題 答案在9樓 https://www.v2ex.com/t/188230#r_2026842

 

6、搜索引擎優化建議:

若是是外網項目,建議到百度站長平臺,全站HTTPS協議申請,HTTPS協議也在排名算法之一。

 

以上爲我的總結,但願對你們有所幫助,若是有不對的地方你們能夠指出,歡迎拍磚:)

相關文章
相關標籤/搜索