我需要通过在我的应用程序服务器提供我的应用程序8080
,我的静态文件从一个目录不碰应用服务器。 nginx的配置我是这样的......
# app server on port 8080
# nginx listens on port 8123
server {
listen 8123;
access_log off;
location /static/ {
# root /var/www/app/static/;
alias /var/www/app/static/;
autoindex off;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
现在,有了这个配置,一切工作正常。 需要注意的是, root
指令删除注释。
如果我激活root
和停用的alias
-它停止工作。 然而,当我删除尾随/static/
从root
就开始工作了。
一个人能解释这是怎么回事。 还请解释清楚和冗长之间有什么区别root
和alias
,它们的目的。
我已经找到答案,我的困惑。
还有就是之间的很重要的区别root
和alias
指令。 的方式的这种差异存在于指定的路径root
或alias
处理。
在的情况下, root
指令, 完整路径中的情况下, 附加到根包括位置部分 ,而alias
指令, 只有不包括位置部分的路径的一部分被附加到别名 。
为了显示:
比方说,我们有配置
location /static/ {
root /var/www/app/static/;
autoindex off;
}
在这种情况下的Nginx将获得最终的路径将是
/var/www/app/static/static
这将返回404
,因为没有static/
内static/
这是因为,位置部分被附加到在指定的路径root
。 因此,有root
,正确的方法是
location /static/ {
root /var/www/app/;
autoindex off;
}
在另一方面, alias
,位置的部分被丢弃 。 所以对于配置
location /static/ {
alias /var/www/app/static/;
autoindex off;
}
最终路径将正确被形成为
/var/www/app/static
看到这里的文档: http://wiki.nginx.org/HttpCoreModule#alias
因为说的那样@treecoder
在的情况下, root
指令,完整路径中的情况下,附加到根包括位置部分,而alias
指令,只有不包括位置部分的路径的一部分被附加到别名。
一张图片胜过千言万语
为root
:
对于alias
:
你的情况,你可以用root
指令,因为$uri
的一部分location
指令是与去年同root
指令的一部分。
Nginx的文件通知:它还有:
当位置指令的值的最后一部分相匹配:
location /images/ { alias /data/w3/images/; }
最好是用root指令来代替:
location /images/ { root /data/w3; }
和root
指令将追加$uri
的路径。
只是一个快速的增编@ good_computer的非常有用的答案,我想,以取代与一个文件夹中的URL的根,但只有当它匹配包含静态文件(我想保留的路径的一部分)的子文件夹。
例如,如果请求的文件在/app/js
或/app/css
,在查找/app/location/public/[that folder]
。
我得到这个使用正则表达式来工作。
location ~ ^/app/((images/|stylesheets/|javascripts/).*)$ {
alias /home/user/sites/app/public/$1;
access_log off;
expires max;
}
server {
server_name xyz.com;
root /home/ubuntu/project_folder/;
client_max_body_size 10M;
access_log /var/log/nginx/project.access.log;
error_log /var/log/nginx/project.error.log;
location /static {
index index.html;
}
location /media {
alias /home/ubuntu/project/media/;
}
}
服务器块住上nginx的静态页面。