2017-04-24 2 views
0

VM Ubuntu15.04 서버가 있고 포트 80에서 요청을 수신하고 다른 포트의 해당 응용 프로그램으로 전달하도록 nginx를 구성했습니다. 하나의 GET 및 POST 서비스가있는 포트 3000을 통해 실행되는 간단한 node.js 서비스가 있습니다. PM2를 사용하여 시작했고 localhost : proxy_pass를 3000/nginx 기본 conf에 추가했습니다. 문제는 내가 잘 작동하는 GET 요청을 사용하려고하지만 POST의 경우 404 오류가 표시됩니다. 우편 배달부 클라이언트를 통해 POST 서비스를 사용하려고했습니다.Nginx에서 node.js POST 요청을 처리 할 수 ​​없습니다.

## 
# 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; 
    #  } 
    #} 

언급, 튜토리얼, 제안 또는 솔루션은 내가 그것을 수행하는 방법을 알려 주시기 바랍니다 nginx를 내 기본 conf의 파일입니다.

답변

0

질문에 대한 Node 프로그램의 한 줄까지 포함하지 않으면 코드에 무엇이 잘못된 것인지 말할 수 없습니다.

또한 "404 오류"는 nginx가 Express와 다른 오류 메시지를 표시하고 정확한 메시지를 알면 오류가 발생한 위치를 알려주기 때문에 잘못 된 것을 알기에 충분하지 않습니다.

curl -v http://localhost:3000/your/get/path 

과 : 동일한 호스트에서

curl -v -X POST -d 'somedata' http://localhost:3000/your/post/path 

를 앱입니다

당신이해야 할 것은 사용하여 두하여 GET 및 POST 핸들러가 제대로 작동하는지 확인하기 위해 처음이다 달리는.

그런 다음 nginx 프록시를 추가하고 nginx를 다시 시작하여 구성이 다시로드되는지 확인한 다음 포트 80과 동일하게 수행하십시오. 다른 것이 있으면 다른 곳에서 작동하여 차이점을 진단하십시오.

그러나 POST 처리기가 localhost : 3000에서 작동하지 않으면 먼저 해결해야합니다.

0

location 블록에서 try_filesproxy_pass을 사용하면 블록이 작동하지 않을 수 있습니다.

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

테스트 귀하의 질문에 닫는 }을 누락 된 것으로 나타나는 nginx -t을 사용하여 구성 : 당신이 nginx 정적 파일을 다른 프록시 모두의 존재를 테스트하려면

은 명명 된 위치를 사용합니다.

자세한 내용은 this document을 참조하십시오.

관련 문제