在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python  Linux/ nginx 301跳轉(zhuǎn)到帶,的鏈接

nginx 301跳轉(zhuǎn)到帶,的鏈接

訪問(wèn) [https://www.oyohyee.com/admin]
會(huì)301重定向到 [http://www.oyohyee.com,www.oy...]
使用curl -IL https://www.oyohyee.com/admin
得到如下信息

HTTP/1.1 301 MOVED PERMANENTLY
Server: nginx/1.12.2
Date: Thu, 12 Apr 2018 00:45:21 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 297
Connection: keep-alive
Location: http://www.oyohyee.com,www.oyohyee.com/admin/

(這里是nginx進(jìn)行的跳轉(zhuǎn),同時(shí)跳轉(zhuǎn)后的鏈接是http協(xié)議)

初步判斷是nginx的問(wèn)題,但是不知道應(yīng)該怎么解決,并且很好奇為什么會(huì)有這個(gè)跳轉(zhuǎn)

希望能夠按照f(shuō)lask規(guī)則跳轉(zhuǎn)到[https://www.oyohyee.com/admin/]


相關(guān)信息如下:

centos + nginx + gunicorn + flask

flask路由函數(shù)

@app.route('/admin/')
def admin():
    return render_template("admin/admin.html")

flask重定向規(guī)則

唯一 URL / 重定向行為
Flask 的 URL 規(guī)則基于 Werkzeug 的路由模塊。這個(gè)模塊背后的思想是基于 Apache
以及更早的 HTTP 服務(wù)器主張的先例,保證優(yōu)雅且唯一的 URL。 以這兩個(gè)規(guī)則為例:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about') def about():
    return 'The about page' 

雖然它們看起來(lái)著實(shí)相似,但它們結(jié)尾斜線的使用在 URL 定義 中不同。 第一種情況中,指向 projects 的規(guī)范 URL 尾端有一個(gè)斜線。這種感覺(jué)很像在文件系統(tǒng)中的文件夾。訪問(wèn)一個(gè)結(jié)尾不帶斜線的 URL 會(huì)被
Flask 重定向到帶斜線的規(guī)范 URL 去。 然而,第二種情況的 URL 結(jié)尾不帶斜線,類(lèi)似 UNIX-like
系統(tǒng)下的文件的路徑名。訪問(wèn)結(jié)尾帶斜線的 URL 會(huì)產(chǎn)生一個(gè) 404 “Not Found” 錯(cuò)誤。 這個(gè)行為使得在遺忘尾斜線時(shí),允許關(guān)聯(lián)的
URL 接任工作,與 Apache 和其它的服務(wù)器的行為并無(wú)二異。此外,也保證了 URL 的唯一,有助于避免搜索引擎索引同一個(gè)頁(yè)面兩次。

nginx log信息

 "HEAD /admin HTTP/1.1" 301 0 "-" "curl/7.29.0" "-"

nginx配置信息

server {
    listen       80;
    server_name www.oyohyee.com;
    rewrite ^(.*)$  https://$host$1 permanent;
}

server {
    listen       443 ssl http2 default_server;
    server_name www.oyohyee.com;

    ssl_certificate "/etc/nginx/ssl/1_www.oyohyee.com_bundle.crt";
    ssl_certificate_key "/etc/nginx/ssl/2_www.oyohyee.com.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location ^~ / {
        proxy_pass              http://127.0.0.1:8000/;
        proxy_redirect          off;
        proxy_set_header        Host $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-Host $server_name;
        proxy_set_header        Host $http_host;
    }

    location ^~ /static/ {
         root  /data/OBlog/OBlog/front/;
    }
}
回答
編輯回答
還吻

1、301跳轉(zhuǎn)的Location的域名重復(fù)并且多了一個(gè)逗號(hào)的原因是,nginx反代時(shí)多了一個(gè)Host

        proxy_set_header        Host $host;
        proxy_set_header        Host $http_host;

去掉下方的即可


2、另外你得讓Python代碼知道協(xié)議是https

1) 試下在nginx添加這兩個(gè)頭部

proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;

2) 如果無(wú)效,還需要調(diào)整一下代碼,讀取請(qǐng)求的X_Forwarded_Proto頭部來(lái)獲取協(xié)議
參考代碼:

from flask import Flask
from werkzeug.contrib.fixers import ProxyFix

app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
2017年10月17日 12:24