我使用的是crete5,我需要在我的网站上禁用/login url。 Nginx是我的服务器。
到目前为止,我尝试只允许访问指定的 ip:
location /login {
allow 5.69.34.213;
allow 5.80.29.130;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
但它没有用。它会阻止所有ips 和指定的。我究竟做错了什么?
更新 我的 conf 文件是:
server {
listen 80;
server_name my_website.com;
return 301 https://my_website.com$request_uri;
}
#HTTPS server
server {
listen 443 ssl;
server_name my_website.com;
root /var/www-staging/my_website/public_html;
gzip on;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text;
ssl on;
ssl_certificate /etc/letsencrypt/live/my_website.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my_website.com/privkey.pem;
ssl_session_timeout 5m;
add_header Strict-Transport-Security "max-age=31536000";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";
ssl_prefer_server_ciphers on;
# mkdir /etc/nginx/ssl
# openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
location /templates {
alias /var/www-staging/my_website/templates/dist;
}
location / {
try_files $uri /index.php$request_uri;
}
location ~ \.php($|/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
include fastcgi_params;
}
location /login {
allow 5.80.29.130;
deny all;
}
error_log /var/log/nginx/my_website_error.log;
access_log /var/log/nginx/my_website_access.log;
}
Run Code Online (Sandbox Code Playgroud)
nginx 文档解释了您的情况:http : //nginx.org/en/docs/http/request_processing.html#simple_php_site_configuration
无论列出的顺序如何,nginx 首先搜索由文字字符串给出的最具体的前缀位置。在上面的配置中,唯一的前缀位置是“/”,并且由于它匹配任何请求,因此将用作最后的手段。然后 nginx 按照配置文件中列出的顺序检查正则表达式给出的位置。第一个匹配的表达式停止搜索,nginx 将使用这个位置。如果没有正则表达式匹配请求,则 nginx 使用之前找到的最具体的前缀位置。
因此,/login仅在没有匹配的正则表达式时才匹配此语句。/login/login.php例如,如果您访问,您将location ~ \.php($|/)赢得关于谁可以处理此请求的选举。
解决方案 1
要解决您的问题,请将此位置设置在 php location
location ~* /login {
allow 5.80.29.130;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
解决方案 2
用
location ^~ /login {
allow 5.80.29.130;
deny all;
}
Run Code Online (Sandbox Code Playgroud)
http://nginx.org/en/docs/http/ngx_http_core_module.html#location解释了^~如果此前缀字符串位置匹配,则禁用正则表达式匹配。
| 归档时间: |
|
| 查看次数: |
34470 次 |
| 最近记录: |