web-dev-qa-db-ja.com

nginxは外部ホストに外部リクエストを渡しません

Jettyサーバーはlocalhost:8080で実行され、curl(PuTTY)を介してリクエストを行うと、正常に応答します。

curl -H "Content-Type: application/json" -X POST -d '{"message":"Hi"}' http://localhost:8080

私は次のnginx.conf構成を持っています:

server{
        listen 80;
        server_name 52.27.79.132;
        root /data/www;
        index index.html

        # static files: .png, .css, .js...
        location /static/ {
           root /data/www;
        }

        location ^~/api/*{
            proxy_pass        http://localhost:8080;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header  Host $http_Host;
        }

    }

# include /etc/nginx/sites-enabled/*;

Jettyサーバーが「/」へのリクエストを取得すると、Javaサーブレットが実行されます

ブラウザはindex.htmlページを正常に返しますが、javascriptがAJAX-requestを ' http://52.27.79.132/api/ 'にすると、404エラーが発生します


理由を知っている人はいますか?

1
Ildar Zaripov

お使いのバージョンでは正規表現が正しくありません。ただし、実際には正規表現のマッチングは必要ないため、次のバージョンを使用できます。

location /api {
    proxy_pass        http://localhost:8080;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_Host;
}

何らかの理由で正規表現を使用する場合、最初の行は次のようになります。

location ^~ ^/api/.*

ドットは任意の文字を意味し、アスタリスクは0回以上繰り返すことを意味します。

元のロケーション行で、/0回以上繰り返しました。

1
Tero Kilkanen