建議點擊 查看原文 查看最新內(nèi)容。
原文鏈接: https://typonotes.com/posts/2023/08/28/nginx-http-https-redirect-scenarios/
這種方式比較簡單。
所以可以直接通過在 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 中。
這種情況, 稍微麻煩一點。
這種情況下, 我們直接使用 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ī)則
Nginx 默認提供了獲取 HTTP Header 的方法, 參考文檔 Nginx 各種頭技巧[1]。
這里做一個總結(jié),
默認情況下 變量名遵守以下規(guī)則:
-
變 _
**,## 正確
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
server {
if ( $x_customize_header ){
# statement
}
}
server {
if ( $x_customize_header = "vscode-client/v1.2" ){
# statement
}
}
加我好友, 備注 技術(shù)群 加群一起學(xué)習(xí) Golang, Devops, Docker/K8s。
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效果。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。