Nginxのドメイン振り分けが上手く動作しない.

実現したいこと

同一サーバーに対して異なるドメインからアクセスした時に処理を分けたい.
ドメイン名は異なりますがIPアドレスは同一です.

発生している問題・分からないこと

期待する処理としては,ttp://www.foo.com (※)では /var/www/foo/public 以下のコンテンツにアクセス,ttps://www.bar.com (※)では /var/www/bar/public 以下のコンテンッツにアクセスして欲しいです.上記2通りのURLでアクセスした場合は期待通りにそれぞれのコンテンツを表示してくれます.

問題なのは次のようなアクセスをした場合です.ttps://www.foo.com (※)にアクセスした場合に/var/www/bar/public以下のコンテンツが表示されます.

ttps://www.foo.com (※)にアクセスした場合に,/var/www/bar/public 以下のコンテンツを表示してほしくないです.期待する動作としては,444や403を返答したいです.

※注釈
リンクになるのでhttpとhttpsの先頭のhを省略して記載しています.

該当のソースコード

Nginx.conf

1worker_processes 1;2 3 4events {5 worker_connections 1024;6}7 8 9http {10 include mime.types;11 default_type application/octet-stream;12 13 sendfile on;14 keepalive_timeout 65;15 16 server {17 server_name www.foo.com;18 root /var/www/foo/public;19 20 location / {21 index index.html;22 }23 }24 25 server {26 server_name www.bar.com;27 root /var/www/bar/public;28 location / {29 index index.html, index.php;30 }31 32 error_page 500 502 503 504 /50x.html;33 location = /50x.html {34 root /usr/share/nginx/html;35 }36 37 location ~ \.php$ {38 fastcgi_pass unix:/run/php-fpm/php-fpm.sock;39 fastcgi_index index.php;40 include /etc/nginx/fastcgi.conf;41 }42 43 44 location ~ /\.ht {45 deny all;46 }47 location ^~ /data {48 deny all;49 }50 location ^~ /.well-known/acme-challenge/ {51 root /usr/share/nginx/html/.well-known;52 }53 54 listen 443 ssl; # managed by Certbot55 (中略)56 }57 58 59 60 server {61 if ($host = www.bar.com) {62 return 301 https://$host$request_uri;63 } # managed by Certbot64 65 66 listen 80;67 server_name www.bar.com;68 return 404; # managed by Certbot69 }70 71 server {72 server_name _;73 return 444;74 }75 76}

試したこと・調べたこと

上記の詳細・結果

「Nginx ドメイン 振り分け」や「Nginx VirtualHost」等で調べましたが,調べた限りではserver_nameを使って振り分ける方法をとっていています.
参考とした記事では,振り分ける場合のプロトコルはhttpまたはhttpsで統一されていたため,httpとhttpsが混在しているため発生している問題であると考えましたが,解決策は得られませんでした.

補足

以下に環境を記載します.
OS: Arch Linux
Nginx: 1.25.4

コメントを投稿

0 コメント