我试图弄清楚如何最好地使用 Nginx 作为代理来服务 PHP(通过 PHP5-FPM)、Python(通过 gunicorn)和 NodeJS。我在站点可用目录中的当前默认文件复制如下。我是否应该尝试配置多个服务器或进行其他更改以启用此功能?提前致谢。
更新: 目前,使用当前配置,Nginx 充当 NodeJS 应用程序的代理。但是,它不再提供 PHP 内容。我是否应该在默认文件中使用不同的服务器,如果是这样,我是否应该能够使用相同的侦听端口但只使用不同的 server_name 并使用位置标签来区分请求?
我正在尝试将某些 URL 请求路由到 PHP 应用程序(在 /var/www - 我从 /usr/share/nginx 切换)以及 Python 和 Nodejs 后端。
我还没有实现的一种想法是尝试多个上游并在主服务器中设置 PHP - 这是否可行,即有一个用于 NodeJS 的上游,一个用于 Python,然后是用于 PHP 的服务器。
upstream test {
server 0.0.0.0:3002;
keepalive 500;
}
server {
listen 81 default_server;
listen [::]:81 default_server; ##remove this?
root /var/www/; ##switched from /usr/share/nginx
index index.php index.html index.htm;
server_name localhost;
location / {
proxy_redirect off;
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_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://0.0.0.0:3002;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
location /RequestDenied {
proxy_pass http://127.0.0.1:4242;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
server {
listen 82;
root /var/www/;
index index.php index.html index.htm;
server_name php;
location ~ /testPHP { //testPHP is part of URL/directory name in /var/www/
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
不确定这是否是最好的接近方式,但它帮助我实现了我想要的。我只是为代理创建了一个新的服务器设置,并使用一个服务器来提供 php 内容。
我一直在寻找类似的解决方案,在 Nginx 中使用 FastCGI 和 NodeJS 服务器提供 PHP。但是我想为来自同一个域和端口的所有请求提供服务。我解决了基于位置的代理请求,而不是拥有单独的服务器。
此示例使用上游:
我发现这篇文章很有用,而且这段代码更像是一个克隆:
http://blog.i-evaluation.com/2013/04/05/lannn-setting-up-nginx-with-php-and-node-js-on-aws/