我希望将子域的根URL和子域的目录提供给我服务器上的两个不同文件夹。这是我所拥有的简单设置,并且不起作用......
server {
index index.html index.htm;
server_name test.example.com;
location / {
root /web/test.example.com/www;
}
location /static {
root /web/test.example.com/static;
}
}
在此示例中,转到test.example.com/
会将索引文件带入/web/test.example.com/www
并转到test.example.com/static
会将索引文件带入/web/test.example.com/static
答案 0 :(得分:202)
您需要使用alias
的{{1}}指令:
location /static
nginx wiki更好地解释了root和别名之间的区别:
请注意,它看起来可能与root指令类似,但文档根目录不会发生变化,只是用于请求的文件系统路径。请求的位置部分将在请求Nginx问题中删除。
答案 1 :(得分:88)
The Location directive system is
Like you want to forward all request which start /static
and your data present in /var/www/static
So a simple method is separated last folder from full path , that means
Full path : /var/www/static
Last Path : /static
and First path : /var/www
location <lastPath> {
root <FirstPath>;
}
So lets see what you did mistake and what is your solutions
Your Mistake :
location /static {
root /web/test.example.com/static;
}
Your Solutions :
location /static {
root /web/test.example.com;
}
答案 2 :(得分:44)
server {
index index.html index.htm;
server_name test.example.com;
location / {
root /web/test.example.com/www;
}
location /static {
root /web/test.example.com;
}
}
答案 3 :(得分:1)
如果你使用这个,我建议你也设置这个命令。
location /static/ {
proxy_set_header Host $host/static; // if you change the directory and the browser can't find your path
alias /web/test.example.com/static/;
}
答案 4 :(得分:0)
更多详细的示例。
设置:您在example.com
有一个网站,在example.com/webapp
有一个Web应用程序
...
server {
listen 443 ssl;
server_name example.com;
root /usr/share/nginx/html/website_dir;
index index.html index.htm;
try_files $uri $uri/ /index.html;
location /webapp/ {
alias /usr/share/nginx/html/webapp_dir/;
index index.html index.htm;
try_files $uri $uri/ /webapp/index.html;
}
}
...
我特意命名了webapp_dir
和website_dir
。如果您具有匹配的名称和文件夹,则可以使用root
指令。
此设置有效,并已在Docker上进行了测试。
注意!!!注意斜线。完全按照示例中的说明放置它们。