Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
建議點擊 查看原文 查看最新內容。
原文鏈接: https://typonotes.com/posts/2023/08/28/nginx-http-https-redirect-scenarios/
這種方式比較簡單。
所以可以直接通過在 http server 上配置到 301 跳轉 到 https 服務器即可。
# 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
}
通常, 我個人習慣將兩個配置寫在同一個文件中。更具體的配置邏輯都放在 https server 中。
這種情況, 稍微麻煩一點。
這種情況下, 我們直接使用 Nginx 提供的 內置變量 scheme
就行不通了。
# 錯誤配置
server {
listen 80;
server_name _;
if ($scheme = "http"){
return 301 https://$host$request_uri;
}
}
使用上述配置, 無論用戶通過任何協議請求, Nginx Server 拿到的都是 http
, 即 條件恒等。結果就是永遠在跳轉, 直到重定向次數過多而報錯。
解決方案就是 使用 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
對應的就是 請求頭 中的 X-Forward-Scheme
。具體規則參考 3. Nginx 獲取 Http Header 規則
Nginx 默認提供了獲取 HTTP Header 的方法, 參考文檔 Nginx 各種頭技巧[1]。
這里做一個總結,
默認情況下 變量名遵守以下規則:
-
變 _
**,## 正確
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
}
}
加我好友, 備注 技術群 加群一起學習 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進程,一般設置為和cpu核數一樣
worker_processes 4;
#錯誤日志存放目錄
error_log /data1/logs/error.log crit;
#運行用戶,默認即是nginx,可不設置
user nginx
#進程pid存放位置
pid /application/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
#最大文件打開數(連接),可設置為系統優化后的ulimit -HSn的結果
worker_rlimit_nofile 51200;
cpu親和力配置,讓不同的進程使用不同的cpu
worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
#工作模式及連接數上限
events
{
use epoll; #epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核,可以大大提高nginx的性能
worker_connections 1024; #;單個后臺worker process進程的最大并發鏈接數
}
香港虛擬空間上設置301跳轉的方法與其他地區的虛擬空間基本相同,主要取決于所使用的服務器環境和網站技術棧。常見的服務器環境包括Apache、Nginx和IIS。以下是如何在這些環境中設置301跳轉的具體方法:
一、Apache服務器
如果你的虛擬空間使用Apache服務器,可以通過修改.htaccess文件來設置301跳轉。
1.1 編輯.htaccess文件
連接到你的虛擬空間,通過FTP或控制面板找到網站根目錄下的.htaccess文件。如果文件不存在,可以新建一個。
在.htaccess文件中添加以下代碼:
# 將舊網址重定向到新網址
Redirect 301 /old-path http://www.yourdomain.com/new-path
# 或者使用Rewrite規則
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/old-path$
RewriteRule ^(.*)$ http://www.yourdomain.com/new-path [R=301,L]
1.2 示例
假設你要將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服務器
如果你的虛擬空間使用Nginx服務器,可以通過修改Nginx配置文件來設置301跳轉。
2.1 編輯Nginx配置文件
連接到你的虛擬空間,通過SSH或控制面板找到Nginx配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目錄下)。
在對應的服務器塊(server block)中添加以下代碼:
server {
listen 80;
server_name yourdomain.com;
location /old-path {
return 301 http://www.yourdomain.com/new-path;
}
}
2.2 示例
假設你要將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以應用更改:
sudo systemctl restart nginx
三、IIS服務器
如果你的虛擬空間使用IIS服務器,可以通過IIS管理器來設置301跳轉。
3.1 使用IIS管理器設置301跳轉
打開IIS管理器。
選擇你的網站,在右側面板中點擊“URL重寫”。
在“URL重寫”模塊中,點擊“添加規則”,選擇“空白規則”。
設置規則名稱,并在“匹配URL”部分設置舊路徑:
匹配類型:正則表達式
匹配URL:^old-path$
在“操作”部分選擇“重定向”,并設置新URL:
重定向URL:http://www.yourdomain.com/new-path
重定向類型:永久(301)
保存并應用規則。
在香港虛擬空間上設置301跳轉的方法主要取決于服務器環境。通過正確修改Apache、Nginx或IIS服務器的配置文件,或者在無法修改服務器配置的情況下使用PHP代碼,都可以實現301跳轉。這些方法不僅可以有效地引導用戶訪問新的URL,還能對搜索引擎友好,提高SEO效果。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。