LoginSignup
0

posted at

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

はじめに

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で書かれているパスに入れ替わる。

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

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
What you can do with signing up
0