我有一个作为代理服务器的Nginx服务器。
我还有3个不同的NodeJS Express服务器在端口8080,9090和8888上运行(所有端口均正常工作)。
服务器8080和9090执行相同的APP。 8888上的服务器当POST请求被转发时,应该返回“POSTING”。
GET和POST路由都为服务器8888正确设置,如果直接用CURL请求调用它们,我会得到正确的响应:
import Express from 'express'; import BodyParser from 'body-parser'; // Initialise server const server = Express(); // for parsing application/json server.use(BodyParser.json()); // Setting port server.set('port', 8888); server.post('/', function(request, response) { console.log('POSTING'); response.send('POSTING'); }); server.get('/', function(request, response) { console.log('GETTING'); response.send('GETTING'); }); console.log(`Starting server on port ${server.get('port')}`) server.listen(server.get('port'));
我的Nginxconfiguration如下:
upstream amit4got { server 127.0.0.1:8080; server 127.0.0.1:9090; } server { listen 7070; server_name 127.0.0.1; access_log /usr/local/etc/nginx/logs/default.access.log; error_log /usr/local/etc/nginx/logs/default.error.log; location /amit4got/ { 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_set_header X-Forwarded-Proto $scheme; proxy_pass http://amit4got; proxy_read_timeout 90; } location /amit4got/flows { 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_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 90; if ($request_method = POST) { proxy_pass http://127.0.0.1:8888; } if ($request_method = GET) { proxy_pass http://amit4got; } } }
Nginx服务于端口7070,端点/ amit4got从8080或9090加载内容。
问题是,当我尝试POST到/ amit4got / flows时,没有POST请求到http://127.0.0.1:8888 。 我刚刚得到404没有find答复。
如果我将proxy_pass更改为重写,则从8888服务器获得正确的响应。
if ($request_method = POST) { rewrite ^ http://127.0.0.1:8888; }
我需要通过POST params发送,所以重写对我不起作用。
我如何使proxy_pass服务器8888工作?
谢谢,阿米特
正如在评论中提到的那样:
proxy_pass http://127.0.0.1:8888; 将最终张贴到http://127.0.0.1:8888/amit4got/flows而不是http://127.0.0.1:8888/ 。