nginx-https


1、rewrite中的flag

跳轉
	redirect	302		臨時跳轉	 舊網站無影響,新網站無排名
	permanent	301		永久跳轉     新跳轉網站有排名,舊網站排名清空
	
	http  ---> https   302		瀏覽器不會記住新域名
	http  ---> https   301		瀏覽器會記錄新域名
	
last		#本條規則匹配完成后,繼續向下匹配新的location URI規則
break	  	#本條規則匹配完成即終止,不再匹配后面的任何規則

當rewrite規則遇到break后,本location{}與其他location{}的所有rewrite/return規則都不再執行。
當rewrite規則遇到last后,本location{}里后續rewrite/return規則不執行,但重寫后的url再次從頭開始執行所有規則,哪個匹配執行哪個。

2、什么是Https

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本傳輸安全協議),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 
    它是一個URI scheme(抽象標識符體系),句法類同http:體系。用於安全的HTTP數據傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。
    這個系統的最初研發由網景公司(Netscape)進行,並內置於其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法。現在它被廣泛用於萬維網上安全敏感的通訊,例如交易支付方面


#HTTP和HTTPS的區別:

1、安全性不同。HTTP是超文本傳輸協議,信息是明文傳輸的。HTTPS是具有安全性的ssl證書加密的傳輸協議。所以HTTPS比HTTP更安全

2、默認端口不同。HTTP的默認端口是80,HTTPS的默認端口是443。

3、協議不同。HTTP是無狀態的協議,而HTTPS是由ssl+HTTP構建的可進行加密傳輸、身份認證的網絡協議。

4、部署的成本不同。HTTP是免費的,HTTPS是需要證書的,一般免費證書很少,需要交費。所以HTTPS的成本相對會更高。

3、為什么要使用Https

#HTTP存在的幾點不足:

通信使用明文,內容可能會被竊聽;不驗證通信方的身份,因此有可能遭遇偽裝;無法證明報文的完整性,有可能已遭篡改。

#《網絡安全法》的相關規定。

#越來越多場景的強制性要求。


#使用HTTPS的原因:
#1、提升用戶的信任度
    使用HTTPS加密訪問的網站一般為大型網站,例如:淘寶、京東等。如果是博客類建議使用SSL證書,對用戶體驗上會比較安全,避免用戶信息泄露。

#2、加密傳輸  
    HTTPS具有加密傳輸通道,有效保障隱私數據密文傳輸,截取也無法解密。HTTP明文傳輸,沒有SSL加密通道,任何人都可以輕松截取或篡改機密數據。

#3、有利於SEO優化
    百度搜索引擎目前會優先收錄HTTPS網站。HTTPS協議分為兩種,一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

#4、防止山寨、鏡像網站
    防范釣魚電子郵件一般含有惡意鏈接,引誘沒有用戶訪問克隆網站。

4、模擬不使用Https的劫持和篡改?

自行百度吧

5、Https通訊是如何確定雙方的身份?

通過權機構來驗證雙方身份---CA,簡單的說,我們需要實現http協議,需要上CA機構申請證書 

公鑰和私鑰就是俗稱的不對稱加密方式。公鑰(Public Key)與私鑰(Private Key)是通過一種算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對外公開的部分,私鑰則是非公開的部分。公鑰通常用於加密會話密鑰、驗證數字簽名,或加密可以用相應的私鑰解密的數據。

通過這種算法得到的密鑰對能保證在世界范圍內是唯一的。使用這個密鑰對的時候,如果用其中一個密鑰加密一段數據,則必須用另一個密鑰才能解密。比如用公鑰加密的數據就必須用私鑰才能解密,如果用私鑰進行加密也必須用公鑰才能解密,否則將無法成功解密。

6、Https證書類型、購買指南、注意事項?

域名型(DV)SSL證書、企業型(OV)SSL證書、增強型(EV)SSL證書,具體請見SSL證書詳解——提升信息安全

7、如何實現單台Https、又如何實現集群Https? (待會解決)

8、如何將Https集成集群架構實現全站Https? (待會解決)

9、有一個url地址不希望走https,其他正常走https? (待會解決)

10、HTTPS證書購買指南 yangdan.com

保護1個域名 www								docs.yangdan.com
保護5個域名 www images cdn test m			docs.oldxu.com  www.yangdan.com iamges.yangdan.com
通配符域名 *.oldboy.com
		1套證書
		保護所有的域名

11、HTTPS注意事項

Https不支持續費,證書到期需重新申請新並進行替換。
Https不支持三級域名解析,如 test.m.oldboy.com。
Https顯示綠色,說明整個網站的url都是https的,並且都是安全的。
Https顯示黃色,說明網站代碼中有部分URL地址是http不安全協議的。
Https顯示紅色,要么證書是假的,要么證書已經過期。		
#創建存放ssl證書的路徑
[root@Nginx ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx ~]# cd /etc/nginx/ssl_key

#1.生成證書 (密碼1234)
[root@Nginx ~]# openssl genrsa -idea -out server.key 2048

#2.生成自簽證書,同時去掉私鑰的密碼
openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
	

#3.配置nginx
[root@web01 conf.d]# cat s.yangdan.com.conf 
server {
	listen 443 ssl;
	server_name s.yangdan.com;
	root /code;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;

	location / {
		index index.html;
	}
}
server {
	listen 80;
	server_name s.yangdan.com;
	return 302 https://$http_host$request_uri;	
}

#1.先配置好后端的web節點
#2.在負載均衡上申請證書(如果之前申請過也可以推送)      <----
#3.配置nginx負載均衡--->http協議
#4.配置域名劫持
#5.配置nginx負載均衡--->轉為https協議

[root@lb01 conf.d]# cat proxy_s.yangdan.com.conf 
upstream webs {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

server {
	listen 443 ssl;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;

	server_name s.oldxu.com;
	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}

server {
	listen 80;
	server_name s.yangdan.com;
	return 302 https://$http_host$request_uri;
}


-------------------------------------------------------------------------
[root@lb01 conf.d]# cat proxy_blog.yangdan.com.conf 
upstream blog {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

server {
	listen 443 ssl;
	server_name blog.yangdan.com;
	
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;

	location / {
		proxy_pass http://blog;
		proxy_next_upstream error timeout http_500 http_502 http_503;
		include proxy_params;
	}
}

server {
	listen 80;
	server_name blog.yangdan.com;
	return 302 https://$http_host$request_uri;
}
--------------------------------------------------------------------------------
[root@web02 conf.d]# cat blog.yangdan.com.conf 
server {
	listen 80;
	server_name blog.yangdan.com;
	root /code/wordpress;

	client_max_body_size 100m;
	location / {
		index index.php;
	}

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_param HTTPS on;
		include fastcgi_params;
	}
}

12、需求: 部分URL走https,部分不走https?

s.yangdan.com/login  ---> https

[root@lb01 conf.d]# cat proxy_s.yangdan.com.conf 
upstream webs {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

server {
	listen 443 ssl;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;

	server_name s.yangdan.com;
	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}
server {
	listen 80;
	server_name s.yangdan.com;
	
	if ($request_uri ~* "^/login") {
		return 302 https://$http_host$request_uri;
	}

	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}

13、需求: 當用戶請求s.oldxu.com/abc時走http,其他的所有都走https?

s.yangdan.com/       ---> https
s.yangdan.com/abc    ---> http

[root@lb01 conf.d]# cat proxy_s.yangdan.com.conf 
upstream webs {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

server {
	listen 443 ssl;
	ssl_certificate ssl_key/server.crt;
	ssl_certificate_key ssl_key/server.key;

	server_name s.oldxu.com;
	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}
server {
	listen 80;
	server_name s.yangdan.com;
	
	if ($request_uri !~* "^/abc") {
		return 302 https://$http_host$request_uri;
	}

	location / {
		proxy_pass http://webs;
		include proxy_params;
	}
}

14、https優化相關的參數?

server {
    listen 443 ssl;
    server_name nginx.bjstack.com;
	
    ssl_certificate ssl_key/1524377920931.pem;
    ssl_certificate_key ssl_key/1524377920931.key;
	ssl_session_cache shared:SSL:10m; 	#在建立完ssl握手后如果斷開連接,在session_timeout時間內再次連接,是不需要在次建立握手,可以復用之前的連接
    ssl_session_timeout 1440m;           #ssl連接斷開后的超時時間
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用的TLS版本協議
    ssl_prefer_server_ciphers on;        #Nginx決定使用哪些協議與瀏覽器進行通訊
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #配置加密套間

l	ocation / {
        root /soft/code;
        index index.html index.htm;
    }
}
server {
        listen 80;
        server_name nginx.bjstack.com;
        return 302 https://$server_name$request_uri;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM