Nginx配置4種模式跳轉到指定統一域名

u=3379754713,1922618047&fm=26&gp=0.jpg

最近全棧導航啓用了https,谷歌要求的是訪問http://xxxxx.com 也能訪問,也在網絡上找了下都不是很齊全,要麼報錯,要麼達不到要求,只有本身嘗動手嘗試了,而且成功記錄如下nginx配置完成目標html

目的須要將如下地址都統一跳轉到 https 的根域名 https://www.itnavs.comlinux

直接先配置

server {
        # 80端口是http正常訪問的接口
        listen 80;
        server_name itnavs.com,www.itnavs.com;
        return 301 https://www.itnavs.com$request_uri;
}
server {
        listen 443;
        server_name itnavs.com;
        return 301 https://www.itnavs.com$request_uri;
}
server {
         listen 443 default_server ssl;
         server_name  www.itnavs.com;

    # 根據本身的域名加載證書以及證書相關協議套件配置
      ssl_certificate_key 2_www.xxx.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #協議配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#套件配置
        ssl_prefer_server_ciphers on;
         
    #靜態文件緩存
    location ~ .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$
        {
            expires    360d;
        }
    # 其餘配置
}
  1. 第一段代碼是若是用戶訪問的是默認端口,也就是80,也就是http,而後用301轉發到https上
  2. 第二段代碼是若是用戶訪問的是443端口,也就是https,而後用301也轉發到https上
  3. 第三段代碼是上面配置的兩個server都跳轉到了443端口,而且是www.itnavs.com 帶www的,因此都走到了這個配置,因此這個應對https的請求,掛載https證書,以及其餘代理轉發,靜態資源緩存都在這裏配置

使用rewrite

其實上面配置也闊以這樣寫nginx

server {
    # 80端口是http正常訪問的接口
    listen 80;
    server_name itnavs.com,www.itnavs.com;
    rewrite ^(.*) https://$host$1 permanent; #這裏用的rewrite
}

先看一下rewrite的語法,rewrite regex replacement [flag]
rewrite: 該指令是實現URL重寫的指令
regex 用於匹配URI的正則表達式
replacement:將regex正則匹配到的內容替換成 replacement
flag有以下值:web

  • last: 本條規則匹配完成後,繼續向下匹配新的location URI 規則。(不經常使用)
  • break: 本條規則匹配完成即終止,再也不匹配後面的任何規則(不經常使用)。
  • redirect: 返回302臨時重定向,瀏覽器地址會顯示跳轉新的URL地址。
  • permanent: 返回301永久重定向。瀏覽器地址會顯示跳轉新的URL地址。

爲何要用301

301永久重定向能夠把搜索引擎的權重所有集中到https://www.itnavs.com正則表達式

補充點防盜鏈知識

什麼是防盜鏈?

盜鏈能夠理解盜圖連接,也就是說把別人的圖片偷過來用在本身的服務器上,那麼防盜鏈能夠理解爲防止其餘人把個人圖片盜取過去。windows

實現防盜鏈:

使用http協議中請求頭部的Referer頭域來判斷當前訪問的網頁或文件的源地址。經過該頭域的值,咱們能夠檢測訪問目標資源的源地址。若是目標源地址不是咱們本身站內的URL的話,那麼這種狀況下,咱們採起阻止措施,實現防盜鏈。可是注意的是:Referer頭域中的值是能夠被更改的。所以該方法也不能徹底安全阻止防盜鏈。之間轉載過一篇是利用的服務端來實現的圖片防盜鏈的實現既然如此簡單瀏覽器

利用$invalid_referer變量

咱們設置valid_referers 指令後,會將其結果傳遞給一個變量$invalid_referer,其值爲0或1,能夠使用這個指令來實現防盜鏈功能,若是valid_referers列表中沒有包含Referer頭的值,$invalid_referer將被設置爲1緩存

設置防盜鏈白名單

白名單就是隻容許白名單內的域名訪問,其他一概禁止安全

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$ {
    valid_referers none blocked *.abc.com *.def.com;
    if ($invalid_referer) {
        return 403;
    }
}

上面的配置含義是先用location匹配出須要的格式(圖片和視頻),而後用valid_referers指令設置容許的域名,其它域名沒有包含在valid_referers列表中,$invalid_referer變量返回的值爲1,最終返回403,禁止訪問。以上就是防盜鏈白名單的設置bash

防盜鏈黑名單

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico|webp)$ {
    valid_referers *.baidu.com;
    if ($invalid_referer = 0) {
        return 403;
    }
}

黑名單與白名單正好相反,就是隻禁止黑名單中的域名請求,其他一概放行,相比白名單,黑名單的限制更加寬鬆,上面的配置中咱們用valid_referers指令設置黑名單域名*.baidu.com,獲取到指定的Referer頭以後,$invalid_referer返回值爲0,最終返回403,禁止百度的域名來訪問

Nginx啓動與中止

注意不要直接雙擊nginx.exe,這樣會致使修改配置後重啓、中止nginx無效,須要手動關閉任務管理器內的全部nginx進程
在nginx.exe目錄,打開命令行工具,用命令 啓動/關閉/重啓nginx

start nginx : 啓動nginx
nginx -s reload  :修改配置後從新加載生效
nginx -s reopen  :從新打開日誌文件
nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確

關閉nginx:
nginx -s stop  :快速中止nginx
nginx -s quit  :完整有序的中止nginx

遇到報錯:
bash: nginx: command not found
有多是你再linux命令行環境下運行了windows命令
若是你以前是容許 nginx -s reload報錯, 試下 ./nginx -s reload

相關文章

Nginx中的Rewrite的重定向配置與實踐
Nginx設置圖片防盜鏈(白名單與黑名單

相關文章
相關標籤/搜索