Nginx + Apache末尾のスラッシュリダイレクト[終了]


8

私がしているNginxサーバが上で実行されている80にプロキシとして動作中のポートApache 2.2をリッスンしています127.0.0.1:8080

アクセスするhttp://hostname/subfolder/とうまくいきます。
アクセスhttp://hostname/subfolderするhttp://hostname:8080/subfolder/と間違った方向にリダイレクトされます。

私が見る限り、間違ったリダイレクトはApacheによって返されますがUseCanonicalNameUseCanonicalPhysicalProxy両方ともに設定されていますOff

それを修正する方法に関するアイデアはありますか?


末尾にスラッシュを付けずにポート80にアクセスするとポート8080にリダイレクトされることを考えると、nginx構成に問題があるようです。nginxがApacheにプロキシしていて、Apacheがリダイレクトを注文している場合を除きます。
PP。

私はnginxをプロキシとして使用しています
クォーク

回答:


5

私もこれに遭遇し、nginx構成のproxy_passディレクティブの直後にproxy_redirectディレクティブを使用して修正できました。

proxy_redirect http://example.com:8080/ http://example.com/ 

これは私の完全なnginx構成です(私の場合、Apacheはポート81にあり、2つのサイトをホストしています。単一の一般的なものを追加する方法がわからないため、2つのサイト固有のproxy_redirect行を追加しました)。

server {
    listen 80;

    access_log /var/log/nginx/apache-proxy.access.log;

    location / {
        proxy_pass http://localhost:81;

        #fix for apache redirects that include the port number
        proxy_redirect http://nfriedly.com:81/ http://nfriedly.com/;
        proxy_redirect http://misticflame.com:81/ http://misticflame.com/;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 6000;
        proxy_send_timeout 6000;
        proxy_read_timeout 6000;
        proxy_buffer_size 4k;
        proxy_buffers 4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        send_timeout 6000;
        proxy_buffering off;
        proxy_next_upstream error;

    }
}

注:これは、5年以上前のnginxの1.0より前のバージョン用でした。現在のバージョンのproxy_redirectのドキュメントは次のとおりです:http ://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect


proxy_redirectを追加すると構文エラーが発生します
TomSawyer

これはnginxのかなり古いバージョンでした。私はもはやnginx(個人用サイトのgithubページの静的コンテンツ)を使用していませんが、現在のproxy_redirectドキュメントへのリンクで回答を更新しました。
ネイサンFriedly

このようにすると、リダイレクトが原因で速度が遅くなります
TomSawyer

2

ApacheのServerNameディレクティブが「hostname:8080」に設定されている場合は、「:8080」を削除するか、「hostname:80」に変更します。「proxy_set_header Host $ host:80」を追加することもできます


1

私はずっと前にこの問題を抱えていました。HTTPRFCと関係があることを覚えているので、末尾のスラッシュはディレクトリ(/ test /)を示し、末尾にスラッシュはファイル(/ test)を示しません。

簡単に言えば、何もない場合にリクエストに末尾のスラッシュを追加する書き換えルールを追加します。

NginxサーバーSolved:trailing slashの問題を 見てください

HTP


1

私はこの正確な問題に最近遭遇しました。提案されたソリューションは機能しますが、Nginxは組み込みのソリューションを提供します。

proxy_redirect default;

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirectにあるドキュメント

これを使用する方法の完全な例を次に示します。

server {
  listen 80;
  location / {
    proxy_pass http://localhost:8080
    proxy_redirect default
  }
}

0

おそらくnginxは、元のリクエストがどのように見えるかをapacheに伝えるためにプロキシヘッダーを設定していません。

nginxの場合:

proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

http://wiki.nginx.org/LikeApacheを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.