我需要:
- 两个 Web 服务应在同一端口 (80) 上提供服务。
- 一项服务仅应提供给本地主机。
服务器配置(两个单独的文件,按此顺序包含)是:
server {
listen 127.0.0.1:80;
location /app {
index index.html;
alias /var/www/app;
}
}
server {
listen *:80 default_server;
location /static {
alias /var/www/static;
}
location / {
uwsgi_pass django;
include /path/to/uwsgi_params;
}
}
问题:第一台服务器可以工作,但是对于需要由第二台服务器处理的请求,我得到 404。
- 我试过
bind
在两个服务器块中分别执行listen
指令,这会导致错误“端口已被使用”。
解决方案/解决方法:
- 对第一个服务器使用不同的端口(可以,因为唯一的客户端在本地主机上)。
答案1
在我看来,使用 2 个块是没有意义的,如果您希望 /app 只能从 127.0.0.1 访问,您可以使用 allow 来限制它,并且只使用一个块来为所有服务,因为我正确理解了您的请求,因为它是通用的。
Server {
listen *:80 default_server;
location /app {
index index.html;
alias /var/www/app;
allow 127.0.0.1
deny all
}
location /static {
alias /var/www/static;
}
location / {
include /path/to/uwsgi_params;
uwsgi_pass django;
}
}
由于我没有太多信息,其中应该定义“django”,我将其作为您当前一般问题的通用解决方案。
答案2
不要使用两个服务器块。要么有多个 IP,要么使用位置指令
答案3
在两个块中指定 IP,例如 127.0.0.1 为本地 IP,89.89.89.89 为非本地主机 IP。
您在第二个中使用了 *:80,其中包括 127.0.0.1。