Nginx代理无法正常工作

时间:2016-12-10 19:25:18

标签: nginx amazon-ec2 proxy

我有一个Node API的基本Nginx配置,我似乎无法弄清楚我做错了什么。

我的Nginx文件如下所示:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
   worker_connections 768;
   multi_accept on;
}

http {

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
    server_tokens off;

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

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

gzip on;
gzip_disable "msie6";

include /etc/nginx/conf.d/*.conf;
   #    include /etc/nginx/sites-enabled/*;
}

然后在我的/etc/nginx/conf.d/里面我有一个如下所示的proxy.conf:

server {
  listen 80;
  server_name [domain_name];

  add_header Access-Control-Allow-Origin '*';

  location / {
    proxy_pass [client_endpoint]
  }

  location /api {
    add_header Allow 'POST, GET, PUT';

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

    proxy_pass http://XX.XXX.XXX.XXX:3005;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  }
}

来自位置的代理" /"工作正常,但尝试代理服务器上的另一个端口超时,因为它无法到达它,或者它会给我403错误。我尝试过使用IP地址和localhost。有人可以帮我从这里出去吗?提前致谢。

编辑:

/位置块工作正常,而/api位置不工作。我正在尝试将/api位置代理到服务器上的端口3005。我是否需要代理到localhost,还是需要代理服务器的IP /端口?我试过了两个,所以我假设我的语法有问题。我错过了什么?感谢。

2 个答案:

答案 0 :(得分:0)

以下是我通常对node / nginx所做的事情:

upstream nodejs {
    server 127.0.0.1:3005;
    keepalive 256;
}

server {
  . . . 

  location /api {
    add_header Allow 'POST, GET, PUT';

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    proxy_set_header        Connection "";
    proxy_http_version      1.1;
    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_pass http://nodejs;
  }
}

答案 1 :(得分:0)

我发现了这个问题。事实证明这与Nginx无关。我在AWS EC2实例上启用了TCP流量,代理工作正常。