location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location /develop { auth_basic "Basic Auth"; auth_basic_user_file /etc/nginx/basic/htpasswd; } location ~ \.php$ { fastcgi_pass phpfpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; }
上記、一見正しそうに見えるが、意図したであろうとおりに動かないです。
/develop/hoge.php
でBasic認証は効かない/develop
でアクセス時に、try_files
でやってるDirectorySlash (ディレクトリ名でアクセスしたときの末尾スラッシュ補完) 的なヤツは効かない/develop/
でアクセス時に、/develop/index.php
は実行されない
こう書かないとだめ。
index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; location /develop { auth_basic "Basic Auth"; auth_basic_user_file /etc/nginx/basic/htpasswd; index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass phpfpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; location ~ ^/develop/(.*)\.php$ { auth_basic "Basic Auth"; auth_basic_user_file /etc/nginx/basic/htpasswd; fastcgi_pass phpfpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; } }
ネストしたlocationの中身の継承に関しては、ディレクティブにより異なるらしい……