私はsginのnginxリバースプロキシの後ろにホストしているcherrypy webappを持っています。Cherrypyアプリケーションは、nginxの背後にあるhttpsではなくhttpにリダイレクトします
nginxの場所は、次のような設定されている:私はhttps://myaddress.com/webappをロードする際
location /webapp {
proxy_pass http://127.0.0.1:8642;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
すべてが動作します。ページが正常に読み込まれます。
リンクをクリックすると、http://myaddress.com/webapp/pageが開きます。これは、nginxの背後にあるsslで読み込まれません。
のリンクは、私は、手動で微ロードするhttps://myaddress.com/webapp/pageを開くことができ、簡単な
<a href='/webapp/page'>Page</a>
です。
ブラウザがHTTPにそれを上に蹴っている理由私は理解することはできません://ではなくHTTPSに滞在://
編集:私はこれを考え出し
(一種の)しばらくこの投稿を忘れてしまった。
メインメソッド名をindex()からdefault()に変更すると、これが修正されました。私は理由を理解することができず、CherryPyのドキュメントでは何も見つけられません。
mysite.com/newsに行くときCherrypyはNews.index()の代わりにNews.default()を返します。これはURIを変更しません。
「Page」が実際にブラウザに表示されることを確認しましたか?この動作を変更するJSクリックハンドラがありますか?あなたが使っているブラウザは何ですか? – webKnjaZ
これはChromeとFirefoxで発生します。私は他の人をテストしていない。 リンクを処理するjavascriptはありません。 cherrypyのメソッド名をindex()からdefault()に変更してもターゲットがhttpに変更されないことがわかりましたが、HTTPRedirect()を実行するとhttps: // – user1220109
ああ、そうです。問題は、cherrypyがhttpを聞いていて、nginxについて何も知らないということです。 'HTTPRedirect'を上げるときに相対URIを使うと、利用可能な情報を使ってスキームで完全なURLを構築しようとします。また、 'cherrypy.url()'関数を使って絶対URLを生成することもできます。 – webKnjaZ