Nginx proxy_pass 配置

Nginx proxy_pass 配置

Nginx proxy_pass 配置

我正在一个域上设置一个 Angular 应用,该应用需要访问另一个域上的 API。这似乎运行良好。在我的 services.js 中,我有一个 service.factory,其中包含:

return $resource('/api/user/:email/:password',....

通常,这个“$resource”只是同一服务器/域上的另一个位置。但是,由于 JavaScript 跨域的限制...实现这一壮举的一种方法是让 Web 服务器进行抓取。

从我对 Nginx 资源的阅读来看,这可以在服务器配置文件中完成。我相信“location”指令列表应该从复杂到简单。我想我已经尝试了以下代码的所有排列(“upstream”和“location”中有和没有尾部斜杠,各种不同的“proxy_set_...”配置等)。

我就是无法让它正常工作。在我的 error.log 中,Web 服务器正在寻找该文件但找不到它。这是正确的,因为路径实际上位于另一台(API)服务器上:

"2014/03/23 13:38:11 [error] 24529#0: *1 open() "/var/www/dev.mydomain.com/htdocs/api/user/[email protected]/asoetus" failed (2: No such file or directory), client:..."

我希望当 Nginx 看到对 URI dev.mydomain.com/api/user/:email/:password 的调用时(它实际上会去获取 api.saasdomain.com/api/user/:email/:password,它确实有效并返回 JSON 响应。实际上它应该获取 /api 目录中的任何内容,无论是 /user/ 还是 /book/ 或 /whatever/)。

nginx 错误日志中没有真正的错误,所以我猜 nginx 甚至没有监听 proxy_pass 调用。???(有一个 bind() 错误,但我有许多其他由 nginx 服务的服务器,只是找到,所以我将忽略此 bind() 错误以供讨论。)好的,我刚刚在 error_log 指令的末尾添加了 debug。以下是 debug nginx error.log 的输出http://freetexthost.com/30yxfss4r4

有什么想法吗?

在 /etc/nginx/conf.d/virtual.conf 文件中:

[snip]

upstream api_alias {
   server api.saasdomain.com; 
}

server {
 listen 80;
 server_name dev.mydomain.com;
 access_log /var/www/dev.mydomain.com/logs/access.log;
 error_log /var/www/dev.mydomain.com/logs/error.log;

 location /api/ {
    resolver 8.8.8.8;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://api_alias/;
    proxy_ssl_session_reuse off;
    proxy_set_header Host $host;
    proxy_redirect off;
    proxy_buffering off;
 }

 location / {
    root /var/www/dev.mydomain.com/htdocs/;
    index index.html;
 }

 [/snip]

答案1

在第 61 行或调试日志中,您会看到请求实际上是向远程服务器发出的,因为您缺少 /api/。尝试像这样设置 proxy_pass 指令:GET /user/[email protected]/aoeu HTTP/1.0

proxy_pass http://api_alias/api/;

相关内容