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;
}