【发布时间】:2018-05-23 21:07:54
【问题描述】:
我有一个 Angular 构建和一个 Laravel 后端,提供在一台服务器上运行的 API。我已经在 nginx 中配置了它们,前端有一个后端服务器的代理。
后端在 url(例如占位符)http://api.example.com 上运行,前端在 http://example.com 上运行
前端配置:
server {
listen 80;
server_name example.com;
location /api {
proxy_pass http://api.example.com;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
location / {
root /var/www/angular/em-frontend/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html$is_args$args;
}
}
后端配置:
server {
listen 80;
server_name api.example.com;
root /var/www/angular/em-backend/public;
index index.php index.html index.htm;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
现在,当我从前端进行任何 api 调用时,我从 nginx 收到 502 Bad Gateway 错误。
来自 nginx 错误日志:
2017/12/09 23:30:40 [alert] 5932#5932: 768 worker_connections are not enough
2017/12/09 23:30:40 [error] 5932#5932: *770 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: IP_MASKED, server: example.com, request: "GET /api/endpoint HTTP/1.1", upstream: "http://IP_ADDRESS:80/api/endpoint", host: "example.com", referrer: "http://example.com/dashboard"
知道如何解决这个问题吗?
【问题讨论】:
-
这些是在同一个 nginx 上运行还是在不同的 nginx 上运行?您是否还在主机文件中为
api.example.com输入了条目?你也在使用 websockets 吗?如果是,那是哪条路? -
建立在 Tarun 可能领先的位置上,太多工人的错误可能表明前端代理的循环,如果主机名配置不正确,它可能会向自身发送请求。但是对等点重置的连接是不同的,并且可能是服务器端代码执行中的合法错误。你有来自每个 nginx 实例的日志吗,php 引擎呢?直接调用后端有效吗?