我一生都无法弄清楚如何为位置制作别名。
基本上,/var/www
我的服务器上可以包含任意数量的文件夹(用于不同的应用程序)。其中之一是ViMbAdmin,位于/var/www/vimbadmin
,以及应该提供给客户端的实际网页文件都在/var/www/vimbadmin/public
。这是我到目前为止所拥有的,这是失败的:
server {
listen 80;
server_name myserver.com;
root /var/www;
index index.php;
# Logs
access_log /var/log/nginx/vimbadmin.access.log;
error_log /var/log/nginx/vimbadmin.error.log;
location /vimbadmin/public {
try_files $uri $uri/ /index.php?$args;
}
location /mail2admin {
alias /vimbadmin/public;
}
# Pass the PHP scripts to FastCGI server
location ~ \.php$ {
# Prevent Zero-day exploit
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是设置它以便黑客不能只是尝试访问http://myserver.com/vimbadmin
,因此实际的 URL 将是http://myserver.com/mail2admin
. 我究竟做错了什么?我真的感到困惑之间的关系root
,location
以及alias
。
location 指令与请求中的 uri 匹配。root 指令和 alias 指令都用于指示从文件系统中的哪个位置提供资源,区别在于使用 时root
,整个 URI 仍然附加到根;而在使用时alias
,位置部分被删除。请参阅/sf/ask/744235341/的答案
所以在你的情况下,你想要的可能看起来像:
server {
listen 80;
server_name myserver.com;
root /var/www;
index index.php;
...
location /vimbadmin/ {
return 404;
}
location /mail2admin/ {
alias /var/www/vimbadmin/public;
try_files $uri $uri/ /index.php?$args;
}
Run Code Online (Sandbox Code Playgroud)
... }
这可以防止任何人访问 myserver.com/vimbadmin/,但是如果他们访问 myserver.com/mail2admin/,nginx 映射到/var/www/vimbadmin/public
(如果您使用root /var/www/vimbadmin/public
,nginx 将尝试从 提供文件/var/www/vimbadmin/public/mail2admin
,这不是您想要的) .
一般来说,像这样的微不足道的 url 混淆不应被视为对黑客的任何防御。如果您想确保此管理面板的安全,您应该依赖某种身份验证,并可能将其锁定,以便在您可行的情况下只允许从已批准的 IP 进行访问。应用程序本身可能会提供一些用户身份验证,并且您始终可以添加基本的 http 身份验证。还建议使用 SSL(如果您只使用自己,则使用自签名,或者如果您希望在一般情况下其他人的浏览器信任它,现在可以使用 LetsEncrypt.org 免费轻松实现)。
归档时间: |
|
查看次数: |
65146 次 |
最近记录: |