整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Nginx: 最常見的 2 中 http to https 跳轉(zhuǎn)場景



          ginx: 最常見的 2 種 http to https 跳轉(zhuǎn)場景

          建議點擊 查看原文 查看最新內(nèi)容。

          原文鏈接: https://typonotes.com/posts/2023/08/28/nginx-http-https-redirect-scenarios/

          1. Nginx 上層無代理, 用戶直接訪問

          這種方式比較簡單。

          1. 我們對 http 和 https 都具有控權(quán)。
          2. 用戶是直接訪問 Nginx 服務(wù)器。

          所以可以直接通過在 http server 上配置到 301 跳轉(zhuǎn) 到 https 服務(wù)器即可。

          # http server
          server {
          listen 80;
          server_name _;
          return 301 https://$host$request_uri;
          }

          # https server
          server {
          listen 443 ssl http2;
          server_name www.example.com;

          # ... other
          }

          通常, 我個人習(xí)慣將兩個配置寫在同一個文件中。更具體的配置邏輯都放在 https server 中。

          2. Nginx 上層有代理

          這種情況, 稍微麻煩一點。

          1. 最重要的, 用戶并不直接訪問我們的 Nginx Server, 而是通過上層代理 Proxy 代理。
          2. 實際提供 HTTPS 服務(wù)的其實是上層 Proxy, 且 我們并沒有管理權(quán)限
          3. 因此, Proxy 在訪問 Nginx Server 的時候, 始終使用 HTTP 協(xié)議。

          這種情況下, 我們直接使用 Nginx 提供的 內(nèi)置變量 scheme 就行不通了。

          # 錯誤配置
          server {
          listen 80;
          server_name _;

          if ($scheme = "http"){
          return 301 https://$host$request_uri;
          }
          }

          使用上述配置, 無論用戶通過任何協(xié)議請求, Nginx Server 拿到的都是 http, 即 條件恒等。結(jié)果就是永遠在跳轉(zhuǎn), 直到重定向次數(shù)過多而報錯。

          解決方案就是 使用 Proxy 提供的 Header 進行判斷。不同的 Proxy 提供的 Header 名稱可能不一樣,需要具體分析。

          # 可用配置
          server {
          listen 80;
          server_name _;

          # ... other

          if ($http_x_forward_scheme = "http"){
          return 301 https://$host$request_uri;
          }
          }

          注意: 這里的 http_x_forward_scheme 對應(yīng)的就是 請求頭 中的 X-Forward-Scheme。具體規(guī)則參考 3. Nginx 獲取 Http Header 規(guī)則

          3. Nginx 獲取 Http Header 規(guī)則

          Nginx 默認提供了獲取 HTTP Header 的方法, 參考文檔 Nginx 各種頭技巧[1]

          這里做一個總結(jié),

          3.1 HTTP Header 轉(zhuǎn) Nginx 變量

          默認情況下 變量名遵守以下規(guī)則:

          1. 將 Header 名稱 **所有大寫變小些, 所有 -_**,
          2. 以 http_ 開頭
          3. Header 名稱不支持 下劃線
          ## 正確
          Server-Version => http_server_version
          X-Forward-Scheme => http_x_forward_scheme
          X-Customize-Header => http_x_customize_header

          ## 錯誤
          Server_Verver (x)

          如果要支持 Header 名稱下劃線, 需要 額外開啟 語法 underscores_in_headers[2]

          Syntax: underscores_in_headers on | off;
          Default: underscores_in_headers off;
          Context: http, server
          server {
          underscores_in_headers on;
          }

          開啟之后, 即可使用。

          Server_Version => http_server_version

          3.2 Header 變量的常規(guī)操作

          1. 判斷 header 是否存在
          server {
          if ( $x_customize_header ){
          # statement
          }
          }
          1. 判斷 header 值是否預(yù)期, 參考 nginx if 語法。
          server {
          if ( $x_customize_header = "vscode-client/v1.2" ){
          # statement
          }
          }

          參考文檔

          1. Heroku Routing Header: https://devcenter.heroku.com/articles/http-routing
          2. Nginx 各種頭技巧: https://liqiang.io/post/nginx-redirect-with-request-header-3c575166
          3. Nginx配置:讀取自定義header + 撰寫AND條件 + 修改響應(yīng)體 + 域名重定向: https://segmentfault.com/a/1190000020852253
          4. Nginx If-Condition: https://blog.xinac.cn/archives/nginx%E9%85%8D%E7%BD%AE%E4%B8%ADifelse%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95.html
          5. Nginx if-is-evil: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
          6. Nginx Creating-Nginx-Rewrite-Rules: https://www.nginx.com/blog/creating-nginx-rewrite-rules/
          7. Nginx 中的 If 判斷: https://www.ucloud.cn/yun/40533.html

          互相吹捧, 共同進步

          加我好友, 備注 技術(shù)群 加群一起學(xué)習(xí) Golang, Devops, Docker/K8s

          參考資料

          [1]

          Nginx 各種頭技巧: https://liqiang.io/post/nginx-redirect-with-request-header-3c575166

          [2]

          語法 underscores_in_headers: http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers

          nginx進程,一般設(shè)置為和cpu核數(shù)一樣

          worker_processes 4;

          #錯誤日志存放目錄

          error_log /data1/logs/error.log crit;

          #運行用戶,默認即是nginx,可不設(shè)置

          user nginx

          #進程pid存放位置

          pid /application/nginx/nginx.pid;

          #Specifies the value for maximum file descriptors that can be opened by this process.

          #最大文件打開數(shù)(連接),可設(shè)置為系統(tǒng)優(yōu)化后的ulimit -HSn的結(jié)果

          worker_rlimit_nofile 51200;

          cpu親和力配置,讓不同的進程使用不同的cpu

          worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;

          #工作模式及連接數(shù)上限

          events

          {

          use epoll; #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能

          worker_connections 1024; #;單個后臺worker process進程的最大并發(fā)鏈接數(shù)

          }

          香港虛擬空間上設(shè)置301跳轉(zhuǎn)的方法與其他地區(qū)的虛擬空間基本相同,主要取決于所使用的服務(wù)器環(huán)境和網(wǎng)站技術(shù)棧。常見的服務(wù)器環(huán)境包括Apache、Nginx和IIS。以下是如何在這些環(huán)境中設(shè)置301跳轉(zhuǎn)的具體方法:

          一、Apache服務(wù)器

          如果你的虛擬空間使用Apache服務(wù)器,可以通過修改.htaccess文件來設(shè)置301跳轉(zhuǎn)。

          1.1 編輯.htaccess文件

          連接到你的虛擬空間,通過FTP或控制面板找到網(wǎng)站根目錄下的.htaccess文件。如果文件不存在,可以新建一個。

          在.htaccess文件中添加以下代碼:

          # 將舊網(wǎng)址重定向到新網(wǎng)址
          Redirect 301 /old-path http://www.yourdomain.com/new-path

          # 或者使用Rewrite規(guī)則
          RewriteEngine On
          RewriteCond %{REQUEST_URI} ^/old-path$
          RewriteRule ^(.*)$ http://www.yourdomain.com/new-path [R=301,L]

          1.2 示例

          假設(shè)你要將http://www.yourdomain.com/old-page重定向到http://www.yourdomain.com/new-page,你可以這樣寫:

          Redirect 301 /old-page http://www.yourdomain.com/new-page

          或者:

          RewriteEngine On
          RewriteCond %{REQUEST_URI} ^/old-page$
          RewriteRule ^(.*)$ http://www.yourdomain.com/new-page [R=301,L]

          二、Nginx服務(wù)器

          如果你的虛擬空間使用Nginx服務(wù)器,可以通過修改Nginx配置文件來設(shè)置301跳轉(zhuǎn)。

          2.1 編輯Nginx配置文件

          連接到你的虛擬空間,通過SSH或控制面板找到Nginx配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目錄下)。

          在對應(yīng)的服務(wù)器塊(server block)中添加以下代碼:

          server {
          listen 80;
          server_name yourdomain.com;

          location /old-path {
          return 301 http://www.yourdomain.com/new-path;
          }
          }

          2.2 示例

          假設(shè)你要將http://www.yourdomain.com/old-page重定向到http://www.yourdomain.com/new-page,你可以這樣寫:

          server {
          listen 80;
          server_name yourdomain.com;

          location /old-page {
          return 301 http://www.yourdomain.com/new-page;
          }
          }

          重啟Nginx以應(yīng)用更改:

          sudo systemctl restart nginx

          三、IIS服務(wù)器

          如果你的虛擬空間使用IIS服務(wù)器,可以通過IIS管理器來設(shè)置301跳轉(zhuǎn)。

          3.1 使用IIS管理器設(shè)置301跳轉(zhuǎn)

          打開IIS管理器。

          選擇你的網(wǎng)站,在右側(cè)面板中點擊“URL重寫”。

          在“URL重寫”模塊中,點擊“添加規(guī)則”,選擇“空白規(guī)則”。

          設(shè)置規(guī)則名稱,并在“匹配URL”部分設(shè)置舊路徑:

          匹配類型:正則表達式

          匹配URL:^old-path$

          在“操作”部分選擇“重定向”,并設(shè)置新URL:

          重定向URL:http://www.yourdomain.com/new-path

          重定向類型:永久(301)

          保存并應(yīng)用規(guī)則。

          在香港虛擬空間上設(shè)置301跳轉(zhuǎn)的方法主要取決于服務(wù)器環(huán)境。通過正確修改Apache、Nginx或IIS服務(wù)器的配置文件,或者在無法修改服務(wù)器配置的情況下使用PHP代碼,都可以實現(xiàn)301跳轉(zhuǎn)。這些方法不僅可以有效地引導(dǎo)用戶訪問新的URL,還能對搜索引擎友好,提高SEO效果。


          主站蜘蛛池模板: 国产精品亚洲午夜一区二区三区| 亚洲av无码一区二区三区人妖| 国产在线一区二区三区av| 国产精品免费一区二区三区| 精品福利一区二区三区| 日韩精品免费一区二区三区| 亚洲一区二区影视| 国产主播一区二区三区| 国产视频一区二区在线播放| 无码中文字幕乱码一区| 国偷自产视频一区二区久| 国产在线精品一区二区高清不卡| 在线电影一区二区| 亚洲AV成人精品一区二区三区 | 亚洲国产精品无码第一区二区三区| 国产成人精品无人区一区| 亚洲国产一区在线| 免费看AV毛片一区二区三区| 亚洲一区爱区精品无码| 亚洲欧洲无码一区二区三区| 国产精品一区二区电影| 国产成人高清精品一区二区三区| 日韩精品无码一区二区三区免费| 福利一区在线视频| 国产成人精品无码一区二区三区| 久久精品国内一区二区三区| 国产精品高清视亚洲一区二区| 国产一区二区视频在线观看| 国产精品无圣光一区二区| 奇米精品一区二区三区在线观看| 国产伦精品一区三区视频| 国产精品一区二区无线| 亚洲永久无码3D动漫一区| 亚洲蜜芽在线精品一区| 无码精品不卡一区二区三区| 国产伦精品一区二区三区免费迷| 无码国产精品一区二区免费式直播| 亚洲一区二区三区免费视频| 亚洲一区中文字幕在线电影网 | 中文字幕AV无码一区二区三区| 国产一区在线mmai|