从 Nginx 密码验证中排除一个目录
Exclude one directory from Nginx password authentication
我已将我的 Nginx 服务器设置为对所有内容进行身份验证,但我想排除 /var/www/html/t/sms/plivo
下的所有文件以进行密码身份验证。我曾尝试使用不同的路径,但当我尝试从浏览器访问 /var/www/html/t/sms/plivo
下的文件时,它总是要求输入密码。
下面是我的/etc/nginx/sites-available/default
文件
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
auth_basic "Private Property";
auth_basic_user_file /etc/nginx/.htpasswd;
#no password for the plivo folder so we can recieve messages!
location = /t/sms/plivo/ {
auth_basic off;
allow all; # Allow all to see content
}
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
location =
语法匹配一个 URI 而不是它下面的所有 URI。此外,您应该使用 ^~
修饰符来防止正则表达式 location
块干扰。有关 location
个块的评估顺序的规则,请参阅 this document。
如果您在 /t/sms/plivo/
下有任何 PHP 文件,您将需要添加一个嵌套的位置块来处理这些文件。
例如:
location ^~ /t/sms/plivo/ {
auth_basic off;
allow all; # Allow all to see content
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
location ~ \.php$
块是您配置中已有的同名块的补充。而且,您可能不需要 allow all
语句,除非您有一些我看不到的 deny
规则。
希望它能对任何人有所帮助 - 我们必须跳过 url 下所有 uri 的身份验证,所以
location ^~ /some/location/to_skip/ {
auth_basic off;
try_files $uri $uri/ /index.html;
}
我已将我的 Nginx 服务器设置为对所有内容进行身份验证,但我想排除 /var/www/html/t/sms/plivo
下的所有文件以进行密码身份验证。我曾尝试使用不同的路径,但当我尝试从浏览器访问 /var/www/html/t/sms/plivo
下的文件时,它总是要求输入密码。
下面是我的/etc/nginx/sites-available/default
文件
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
auth_basic "Private Property";
auth_basic_user_file /etc/nginx/.htpasswd;
#no password for the plivo folder so we can recieve messages!
location = /t/sms/plivo/ {
auth_basic off;
allow all; # Allow all to see content
}
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
location =
语法匹配一个 URI 而不是它下面的所有 URI。此外,您应该使用 ^~
修饰符来防止正则表达式 location
块干扰。有关 location
个块的评估顺序的规则,请参阅 this document。
如果您在 /t/sms/plivo/
下有任何 PHP 文件,您将需要添加一个嵌套的位置块来处理这些文件。
例如:
location ^~ /t/sms/plivo/ {
auth_basic off;
allow all; # Allow all to see content
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
location ~ \.php$
块是您配置中已有的同名块的补充。而且,您可能不需要 allow all
语句,除非您有一些我看不到的 deny
规则。
希望它能对任何人有所帮助 - 我们必须跳过 url 下所有 uri 的身份验证,所以
location ^~ /some/location/to_skip/ {
auth_basic off;
try_files $uri $uri/ /index.html;
}