我更像是一个程序员而不是服务器管理员,所以这个问题对某些人来说似乎微不足道,但我无法让我的nginx反向代理将我的请求转发到正确的服务器......首先,这是我的配置文件(在站点可用的情况下,在启用站点的情况下使用符号链接)
upstream nodejs1 {
server 127.0.0.1:3000;
}
upstream nodejs2 {
server 127.0.0.1:3001;
}
server {
server_name nodejs_proxy;
listen 0.0.0.0:80;
access_log /var/log/nginx/nodejs.log;
location /otherlocation/ {
rewrite /otherlocation/(.*) /$1 break;
proxy_pass http://nodejs1/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
location / {
proxy_pass http://nodejs2/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
}
因此,如果我尝试访问http://myserver.com/
,一切正常,我在端口3001上重定向。但是,如果我尝试访问http://myserver.com/otherlocation/
,我也会被重定向到端口3001(所以我得到了404)。
当我尝试访问http://myserver.com/otherlocation/
时,上述代码段中是否有某些内容无法正确重定向到正确的服务器?
谢谢
PS:myserver.com是一个容易多次更改的临时域(dev,pre-prod,prod),这就是为什么我要写一些可以在所有环境中工作的东西
答案 0 :(得分:3)
首先,您应检查正确的服务器是否正在处理请求并调试最重要的内容。在http
块内的nginx.conf文件(不在已启用站点的文件中)中放置此
log_format mcombined '$server_name - $host - $remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
以上是nginx的默认log format,添加了$server_name
和$host
。您可以添加您认为可能有用的任何variable。
然后更改启用网站的配置以使用此日志格式:
access_log /var/log/nginx/nodejs.log mcombined;
但真正的问题是:在/otherlocation/
块中,您有一个重写规则,将所有内容重写为/
,因此当请求到达/ otherlocation时/ block,它们被重定向到/
。
因此,您最终启用网站的内容将如下所示:
upstream nodejs1 {
server 127.0.0.1:3000;
}
upstream nodejs2 {
server 127.0.0.1:3001;
}
server {
server_name nodejs_proxy;
listen 0.0.0.0:80;
access_log /var/log/nginx/nodejs.log mcombined;
location ^~ /otherlocation/ {
proxy_pass http://nodejs1/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
location / {
proxy_pass http://nodejs2/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
}