Nginx 502 Bad Gateway error on EC2 Instance

vptzau2j  于 2023-04-29  发布在  Nginx
关注(0)|答案(2)|浏览(126)

我在EC2 Linux示例上配置nginx服务器时遇到了一些问题。我在端口3000上运行一个应用程序,并希望使用nginx将其Map到端口80。
下面是我的配置文件:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format main '$remote-addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile on;
    top_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_names_hash_bucket_size 128;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    index index.html index.htm

    server {
        listen 80 default_server;
        [::]:80 default_server;
        server_name localhost;

        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location =/40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location =/50x.html {
        }
    }

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

这是nginx自带的默认文件,我做了很小的修改,最值得注意的是包含了一个名为default的自定义文件,其内容如下:

server {
  listen 80;
  server_name [my_domain_name];
  location / {
    proxy_pass http://[my_private_ip]:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

用正确的值替换方括号中的项。当我尝试导航到网站时,我得到502 Bad Gateway nginx/1。12.1.
我的服务器是一个节点。js服务器运行在端口3000上。
我尝试过故障排除和阅读其他关于坏网关的stackoverflow问题,但我找不到解决方案。谢谢你

cu6pst1q

cu6pst1q1#

采取不同的方法。允许您的应用程序在端口3000上运行(并在3000上侦听)。在这种情况下,您必须将其打开为
http://url:3000
现在我们只需要将所有来自端口80的请求转发到3000,这可以使用iptables轻松完成:

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

现在,您应该能够简单地使用URL打开它,而不需要端口号

gorkyyrv

gorkyyrv2#

SELinux对我来说是问题的根源。持续允许网络http流量解决了我的问题:

$ sudo setsebool -P httpd_can_network_connect 1

更多关于此解决方案:(13: Permission denied) while connecting to upstream:[nginx]

相关问题