LoginSignup
1
1

More than 1 year has passed since last update.

Nginxのproxy_passは2通りの設定がある

Posted at

はじめに

Nginxをリバースプロキシとして利用する際に、.confファイルを作って、locationにproxy_passを設定しますが、書き方によって結果的に出来上がるパスが変わります。
分かってはいるものの、すぐにどっちがどっちだったから忘れてしまうので、メモ的に記事として挙げさせていただきます。

環境

docker-composeで以下のような感じでNginxとAsp.Net(API)を作成しています。demoコンテナーがAPIです。以前の記事で使用したものですので、詳細はそちらをご覧ください。

services:
  nginx:
    volumes:
      - nginxconf:/etc/nginx/conf.d 
      - www:/var/www/html
    ports:
      - 80:80
    networks:
      - front-back

  demo:
    expose:
      - 5000
    networks:
      - front-back

nginxがport:80でListenしていて、http://localhostにアクセスした場合はindex.htmlが表示されます。
このあと、http://localhost/demo/ と入力した場合の動作が以下の設定によって変わります。

設定その1

proxy_passの最後に / をつける

server {
    listen        80;
    server_name   default_server;

    root /var/www/html;
    index index.php index.html index.html;
    location / {
        try_files $uri $uri/ /index.php /index.html;
    }

    location /sample/ {
                    #ここ↓
        proxy_pass http://demo:5000/;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

この場合、http://localhost/sample/と入力すると、http://demo:5000/sample/にパスされます。

設定その2

proxy_passの最後に / をつけない

server {
    listen        80;
    server_name   default_server;

    root /var/www/html;
    index index.php index.html index.html;
    location / {
        try_files $uri $uri/ /index.php /index.html;
    }

    location /sample/ {
                    #ここ↓
        proxy_pass http://demo:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

この場合、http://localhost/sample/と入力すると、http://demo:5000/にパスされます。

まとめ

  • "/" をつけたら、locationで書かれているパスがその後に追記される。
  • "/" がない場合、locationで書かれているパスに入れ替わる。

なんとなく設定ファイルを作ったり、コピペをしていて、うまく動作しないというときに、見直すべきポイントのひとつですね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1