文章向大家介紹詳解NGINX訪問https跳轉到http的解決方法,主要包括詳解NGINX訪問https跳轉到http的解決方法使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。
關于使用HTTPS/SSL的必要性,可以自行baidu,援引的說法,EFF(Electronic Frontier Foundation),全球過半流量采用https。下面我們介紹使用rewrite 方式實現http 跳轉 https。
Nginx - rewrite 方式
Nginx Server 配置
ginx是一款流行的Web服務器軟件,常被用于反向代理。
在Nginx的配置文件中,經常用到root和alias指令,這兩個指令有什么區別。下面是一個具體的示例,配置文件如下:
server {
listen 80;
server_name www.aneirin.xyz;
access_log /var/log/nginx/access.log main;
location /a {
root /html;
}
}
在Nginx服務器目錄”/html/a“下放置文件”src.txt“,包含內容:“This is a test page!!!”。
訪問這個文件,
[aneirin@host-1]$ curl http://www.aneirin.xyz/a/src.txt
This is a test page!!
如果要用alias指令,需要將配置文件的第7行修改成這樣,
alias /html/a;
之所以要這樣修改,是因為alias指令的作用是給指定的location起一個別名。結合上面的配置文件,簡單理解為給“/a”起了個別名“/html/a”。配置文件中的location是”/a“,當訪問"/a/src.txt"時,nginx把文件”/html/a/src.txt“返回給客戶端。
再舉一個例子,如果請求的URL是“http://www.aneirin.xyz/a/b/src.txt”,nginx配置文件不改,“src.txt”文件應該放到哪個目錄?nginx配置文件:
server {
listen 80;
server_name www.aneirin.xyz;
access_log /var/log/nginx/third-access.log main;
location /a {
root /html;
}
#location /a {
# alias /html/a/;
#}
}
答案:“src.txt”應該放到服務器“/html/a/b”目錄,大家想想為什么?
“root”和“alias”還有一個區別是“alias”只能放在“location”上下文中,而“root”可以放置在“http”,“server”,“location”上下文中。
在生產環境中,為了保護WEB服務器的安全,我們都會對用戶的訪問做出一些限制,保證服務器的安全及資源的合理分配。
限流(rate limiting)是NGINX眾多特性中最有用的,也是經常容易被誤解和錯誤配置的,特性之一訪問請求限速。該特性可以限制某個用戶在一個給定時間段內能夠產生的HTTP請求數。請求可以簡單到就是一個對于主頁的GET請求或者一個登陸表格的POST請求。用于安全目的上,比如減慢暴力密碼破解攻擊。通過限制進來的請求速率,并且(結合日志)標記出目標URLs來幫助防范DDoS攻擊。一般地說,限流是用在保護上游應用服務器不被在同一時刻的大量用戶請求湮沒
限速說得很籠統,其實限速分為很多種限速方法:
1)下載速度限速
2)單位時間內請求數限制
3)基于客戶端的并發連接限速
nginx限速模塊
Nginx官方版本限制IP的連接和并發分別有兩個模塊:
limit_req_zone 用來限制單位時間內的請求數,即速率限制,采用的漏桶算法 "leaky bucket"。
limit_req_conn 用來限制同一時間連接數,即并發限制。
下載限速:限制下載速度及并發連接數,應用在下載服務器中,保護帶寬及服務器的IO資源。
請求限速:限制單位時間內用戶訪問請求,防止惡意攻擊,保護服務器及資源安全。
漏桶原理
算法思想是:
水(請求)從上方倒入水桶,從水桶下方流出(被處理);
來不及流出的水存在水桶中(緩沖),以固定速率流出;
水桶滿后水溢出(丟棄)。
這個算法的核心是:緩存請求、勻速處理、多余的請求直接丟棄。
相比漏桶算法,令牌桶算法不同之處在于它不但有一只“桶”,還有個隊列,這個桶是用來存放令牌的,隊列才是用來存放請求的。
1)單位時間內請求數限制
#基于IP對下載速率做限制 限制每秒處理1次請求,對突發超過5個以后的請求放入緩存區
http {
limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;
server {
location /abc {
limit_req zone=test burst=5 nodelay;
}
}
limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s;
第一個參數:$binary_remote_addr 表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫內存占用量,是限制同一客戶端ip地址。
第二個參數:zone=test:10m表示生成一個大小為10M,名字為test的內存區域,用來存儲訪問的頻次信息。
第三個參數:rate=1r/s表示允許相同標識的客戶端的訪問頻次,這里限制的是每秒1次,還可以有比如30r/m的。
limit_req zone=test burst=5 nodelay;
第一個參數:zone=test 設置使用哪個配置區域來做限制,與上面limit_req_zone 里的name對應。
第二個參數:burst=5,重點說明一下這個配置,burst爆發的意思,這個配置的意思是設置一個大小為5的緩沖區當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩沖區內。
第三個參數:nodelay,如果設置,超過訪問頻次而且緩沖區也滿了的時候就會直接返回503,如果沒有設置,則所有請求會等待排隊。
重啟nginx服務
測試機
[root@slave tmp]# for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done
[root@slave tmp]# killall wget 會出現不同的狀態,有的是以退出有的是已終止
2)限制并發連接數
#基于IP做連接限制 限制同一IP并發為1
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /abc {
limit_conn addr 1;
}
}
}
重啟nginx服務
測試機
[root@slave tmp]# for i in `seq 1 10`; do (wget http://192.168.11.16/abc/bigfile -P /tmp) & done
#退出了9個只能開啟一個
3)限制下載速度
下載速度為100k
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /abc {
limit_rate 100k;
}
}
}
重啟nginx服務
測試機使用wget命令測試
4)綜合案例
限制web服務器請求處理為1秒一個,觸發值為5;
限制并發連接數為4;
限制下載速度為100.
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#基于IP做連接限制 限制同一IP并發為1 下載速度為100K
limit_conn_zone $binary_remote_addr zone=addr:10m;
#基于IP對下載速率做限制 限制每秒處理1次請求,對突發超過5個以后的請求放入緩存區
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /abc {
limit_req zone=one burst=5 nodelay;
limit_conn addr 4;
limit_rate 100k;
}
}
}
限速介紹
應用場景
限速原理
限速實現
重點:限速的作用,如何實現限速
難點:如何限制并發連接和下載速度
*請認真填寫需求信息,我們會在24小時內與您取得聯系。