Nginxは、スラッシュなしでURLにアクセスすると、ポート8080にリダイレクトします[クローズ]


19

アクセス時:http : //example.com/somefolder- > http://example.com:8080/somefolder

私はこれを試しました:

 http {
    port_in_redirect off;

何か案は?


設定を提供できますか?nginxの背後にある別のサービスにプロキシしていますか?
シェーンマッデン

私たちはApacheにプロキシしていると思います。どの構成ファイルが必要ですか?
クリスミュンヒ

3
ディレクティブserverを含むブロックを定義するnginx設定ファイルproxy_pass。おそらく必要になるのはproxy_redirectディレクティブです-設定を確認して確認する必要があります。
シェーンマッデン

注一部のブラウザでは、変更時にように、リダイレクトをキャッシュしていることport_in_redirectからonoffそれを再起動する必要があります。
エマーション

@emersionはport_in_redirectまったく動作しません
TomSawyer

回答:


21

私はちょうど同じ問題に遭遇し、port_in_redirect off;実際に私のために働いた、ちょうどあなたがserver {}ブロック内でそれを使用することを確認してください。

server {
  listen 8080;
  server_name example.com;

  port_in_redirect off;
  autoindex on;

  location / {
    root /var/www/example.com;
    index index.html;
  }
}

または、port_in_redirectinsideを使用しますlocation
wqw

ロードバランサの背後で8080でnginxをホストするために完全に機能しました。ありがとう
xxstevenxo

また、私のために働いた、あなたの助けに感謝多くは
h3nr1ke

4

これで問題が解決するはずです。proxy_redirectディレクティブの直後にproxy_passディレクティブを追加

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


3

nginxリバースプロキシのセットアップの背後でApacheを使用しているときにまだこの問題が発生している場合は、ffを試すことができます。

  場所/ {
    proxy_redirect off;
    proxy_set_header Host $ host:$ server_port; #<-これは私のものを解決した
    proxy_set_header X-Forwarded-Host $ http_host;
    proxy_set_header X-Real-IP $ remote_addr;
    proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8083 ;
  }
  

私の設定では、Apacheに127.0.0.1:8083をリッスンさせ、nginxプロキシ要求を許可させます。


2

nginxとApacheのセットアップで同じ問題が発生しました。Apacheは自身のポート(8080で実行)にリダイレクトしているようですが、nginxはポート80にあります。

私のセットアップでは、これが作られた無限のリダイレクトループのための通常の URLを:

proxy_set_header Host $host:80; # Force port 80

代わりに、次のように、返されるデータをポート80にバインドします。

proxy_bind $host:80; # Bind to port 80

ここに私のnginxサーバーブロックがあります:

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    server_name _; # Wildcard server

    location / {
        proxy_bind $host:80; # Bind to port 80 << THIS IS THE MAGIC
        proxy_pass http://localhost:8080;
        proxy_set_header Host            $host; # Pass host header
        proxy_set_header X-Real-IP       $remote_addr; # Preserve client IP
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

このワイルドカード設定では、nginxにサーバーブロックがないすべてのリクエストがApacheに渡されます。


すべてでは動作しません
TomSawyer

1

他の誰かがこの問題を抱えていた場合-http: //www.linuxquestions.org/questions/linux-server-73/strange-nginx-redirects-without-trailing-slash-930876/の記事が私のために問題を解決しました。

プロキシに余分なヘッダーを追加する必要がありました。

あなたがホストのセットを持っていることを確認し$http_host、また、あなたが設定したことをX-Forwarded-Hostするために$http_host、以下のように:

proxy_redirect off;
proxy_set_header Host $http_host;             # <-- make sure this is $http_host
proxy_set_header X-Forwarded-Host $http_host; # <-- make sure you set this
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 8k;
proxy_busy_buffers_size 64k;

これは、すべてでは動作しません
TomSawyer



0

同様の問題がありました。

たぶんproxy_set_header、ディレクティブを使用してヘッダーのホストと場所を設定する必要があります。私の構成では、追加しましたproxy_set_header Location $host:80。そして、すべての要求は現在ポート80を返します。


これにより、「/」以外のリダイレクトが中断されると考えられます-すべてのリダイレクトは$ host:80を指します
ペリエリズム

0

この問題は、Nginxが相対パスを絶対パスに自動変換するために発生します。
Nginxが翻訳されないようにするには、スラッシュの前にスペースを追加する方法があります。 ngx.redirect(" /foo")


これは3年前の質問です。
鹿ハンター

-1

代わりにこれをサーバーブロックに追加することをお勧めします。

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

これは、example.com / wp-adminにアクセスしたときに、example.com:8080 / wp-admin /に移動するのではなく、example.com / wp-adminに移動し、CloudFlare DNSを使用している場合は、サイトがダウンしています。

Ubuntu、Nginx、およびVarnishを使用していますが、これはport_in_redirectを無効にするのではなく、現在完全に機能しています。

追加するには、次の後に必ずnginxを再起動してください。

sudo service nginx restart

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