Nginx无法满足node.js POST请求 [英] Nginx unable to serve the node.js POST requests

查看:130
本文介绍了Nginx无法满足node.js POST请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台VM Ubuntu15.04服务器,并且已将nginx配置为侦听端口80上的请求,并将请求转发到不同端口上的相应应用程序.我有一个运行在端口3000上的简单的node.js服务,该服务具有一个GET和POST服务.我已经通过使用PM2启动了它,并在我的nginx默认conf中将proxy_pass添加到localhost:3000/中.问题是,当我尝试使用GET请求时,它工作正常,但在POST的情况下,它显示404错误.我试图通过邮递员客户端使用POST服务.

I've a VM Ubuntu15.04 server and I've configured nginx to listen requests on port 80 and forward them to respective applications on different ports. I have a simple node.js service running over port 3000 which has one GET and POST service. I have started it by using PM2 and added a proxy_pass to localhost:3000/ in my nginx default conf. The problem is when i try to use a GET request it is working fine but in case of POST it is showing 404 error. I've tried to use the POST service through postman client.

这是我的默认nginx conf文件

This is my default conf file of nginx

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a   clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

upstream my_nodejs_upstream {
server 127.0.0.1:3000;
keepalive 64;                                                         
}

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

    # SSL configuration
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Self signed certs generated by the ssl-cert package
    # Don't use them in a production server!
    #
    # include snippets/snakeoil.conf;

    root /var/www/face_rec/ServerTest;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name localhost;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;

    proxy_pass http://localhost:3000;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-Proto $scheme;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #       include snippets/fastcgi-php.conf;
    #
    #       # With php5-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
    #       # With php5-fpm:
    #       fastcgi_pass unix:/var/run/php5-fpm.sock;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #       deny all;
    #}}
  # Virtual Host configuration for example.com
  #
  # You can move that to a different file under sites-available/ and symlink 
  that
  # to sites-enabled/ to enable it.
  #
  #server {
  #       listen 80;
  #       listen [::]:80;

  #       server_name example.com;

  #       root /var/www/example.com;
  #       index index.html;

  #       location / {
  #               try_files $uri $uri/ =404;
  #       }
  #}

任何参考,教程,建议或解决方案,请让我知道该怎么做.

Any reference, tutorial, suggestions or solutions please let me know how to do it.

推荐答案

在同一location块中使用try_filesproxy_pass可能无法正常工作.

Using try_files and proxy_pass in the same location block is probably not going to work.

如果要nginx测试是否存在静态文件并代理其他所有文件,请使用命名位置:

If you want nginx to test for the presence of a static file and proxy everything else, use a named location:

root /path/to/root;
location / {
    try_files $uri $uri/ @proxy;
}
location @proxy {
    proxy_pass ...;
    ...
}

使用nginx -t测试配置,因为您的问题似乎缺少结束}.

Test the configuration using nginx -t as your question appears to be missing a closing }.

有关详细信息,请参见此文档.

See this document for details.

这篇关于Nginx无法满足node.js POST请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆