我有一个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 /端口?我试过了两个,所以我假设我的语法有问题。我错过了什么?感谢。
答案 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流量,代理工作正常。