nginx简单的proxy_pass到localhost无法正常工作

aga*_*gam 28 proxy nginx

我正在尝试运行极简主义的反向代理,并提出以下内容:

events {
    worker_connections 4096;
}   

http {
    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:3000/;
        }   
    }   
}   
Run Code Online (Sandbox Code Playgroud)

`

但是,当我访问此服务器时,我得到标准的"欢迎来到nginx页面",而不是来自在端口3000上运行的服务器的响应.

如果我ssh到机器并运行curl http://127.0.0.1:3000/,我得到了所需的结果(最终我在端口上运行该服务器80,它工作正常,所以我知道它与反向代理配置有关).

Vij*_*ati 33

我有完全相同的问题.我只是在我的nginx.conf文件中注释掉了一行:

include /etc/nginx/sites-enabled/*;

变成

#include /etc/nginx/sites-enabled/*;

  • 这对我有用,谢谢.它完全禁用了什么? (9认同)
  • 你说的不行。我没有任何 `include /etc/nginx/sites-enabled/*;` 来注释掉 `/etc/nginx` 文件夹或配置中的任何地方,仍然遇到这个问题 (2认同)
  • @Green有点晚了,但我自己也遇到过这个问题.在我的情况下,包含文件是`/etc/nginx/conf.d/*.conf` - 这包括与我的站点配置冲突的默认站点的配置.在您的情况下,它可能是代理配置本身的问题 (2认同)
  • 遇到同样的问题,并注释掉`incllude /etc/nginx/conf.d / *。conf`有助于。但是目录`/ etc / nginx / conf.d`是空的。为什么这会以这种不可预测的方式起作用? (2认同)

Eze*_*aga 10

/根据我的经验,在末尾添加尾部斜杠可以解决问题。

从:

server {
    listen       80;
    server_name  node_servers;
    
    # reverse proxy to nodejs
    location /developV4 {
        proxy_pass http://127.0.0.1:8081;
    }
}
Run Code Online (Sandbox Code Playgroud)

到:

server {
    listen       80;
    server_name  node_servers;
    
    # reverse proxy to nodejs
    location /developV4/ {
        proxy_pass http://127.0.0.1:8081/;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢兄弟,你确实节省了我的时间 (2认同)
  • 非常感谢您提供这个出色的解决方案。 (2认同)

小智 9

通过答案解释Vijay的帖子,因为交换不会让我发表评论.

可能需要注释掉启用站点的目录,因为您使用的是标准的nginx.conf文件.您会注意到该行已经在http指令中.如果您使用的是标准配置,则需要在另一个http指令中重新定义http指令.您还可以将站点文件更新为仅具有服务器指令而不是http指令.

Standard-ish nginx.conf文件:

worker_processes  4;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
  worker_connections  1024;
}

http {

  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  access_log    /var/log/nginx/access.log;

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  keepalive_timeout  65;

  gzip  on;
  gzip_http_version 1.0;
  gzip_comp_level 5;
  gzip_proxied any;
  gzip_vary off;
  gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml application/atom+xml text/javascript application/javascript application/json text/mathml;
  gzip_min_length  1000;
  gzip_disable     "MSIE [1-6]\.";

  server_names_hash_bucket_size 64;
  types_hash_max_size 2048;
  types_hash_bucket_size 64;
  client_max_body_size 1024;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}
Run Code Online (Sandbox Code Playgroud)

启用站点内的示例兼容站点文件:

server {
    server_name {server name};
    listen 80;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    location / {
        proxy_pass http://example.com:8080;
        proxy_set_header Host $host;
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 9

我尝试了上述所有答案,但没有任何效果,但经过一段时间的思考,我发现selinux被设置为强制,这导致了问题,一旦我将selinux设置为宽容,它就会按预期工作。

这是我的 nginx 配置:

location / {
    proxy_pass http://127.0.0.1:8080;
    }
Run Code Online (Sandbox Code Playgroud)

目前,selinux设置为强制执行,这是我得到的错误。

[root@vm1 ~]# getenforce 
 Enforcing
[root@vm1 ~]# 
Run Code Online (Sandbox Code Playgroud)

错误图像

一旦我将selinux设置为宽容,它就会按预期工作。

[root@vm1 ~]# setenforce 0
[root@vm1 ~]# getenforce 
 Permissive
[root@vm1 ~]# 
Run Code Online (Sandbox Code Playgroud)

代理成功

不要忘记将selinux的更改永久化,否则重启后将不起作用。

sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
Run Code Online (Sandbox Code Playgroud)