我正在尝试以下配置;在前言中,我有一个有效的Nginx / PHP FastCGI实现,在一个服务器上工作,只有一个ip地址,没有FQDN和/或DNS服务于一个基于PHP的网站/应用程序。现在,我有关于另一台服务器的相同场景,不同之处在于需要服务多个客户端站点(一个是Wordpress站点)。到目前为止,我还不是任何想象力的Nginx专家。
概述:
服务器块的文档根目录为'/usr/share/nginx/html'
,即Nginx默认值。服务很好,而不是来自http://xxx.xxx.xxx.76的问题。现在要求让客户进入他们的浏览器地址http://xxx.xxx.xxx.76/pmhs作为示例。然后将为其基于php的站点提供服务,等等http://xxx.xxx.xxx.76/client用于配置和提供任何其他站点。
这些客户端的文档根目录位于标准的CentOS 7文件夹'/srv'
中,其中所有客户端都配置为在其'/srv/www/{client}.production/public_html'
文件夹中提供网站内容。我已经能够挖掘的大多数配置示例并不是特定于这种类型的配置,大多数(如果不是全部)都有某种服务器和/或dns涉及使路由更容易理解(在我看来)契机)。
server {
## -------------------------------------------------
# define virtual server configuration
## -------------------------------------------------
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm index.php;
access_log /var/log/nginx/default.access.log main;
error_log /var/log/nginx/default.error.log debug;
rewrite_log on;
## -------------------------------------------------
# default site / ip address
# @ serve nginx welcome page
## -------------------------------------------------
location = / {
try_files $uri $uri/;
}
## -------------------------------------------------
# favicon.ico location filter
## -------------------------------------------------
location = /favicon.ico { access_log off; log_not_found off; }
## -------------------------------------------------
# do not serve hidden files
## -------------------------------------------------
location ~ /\. { access_log off; log_not_found off; deny all; }
## -------------------------------------------------
# client website location block
## -------------------------------------------------
location ~ ^\/(?<client>[\w-_]+) {
# reset the document root for the client
#root /srv/www/$client.production/public_html;
alias /srv/www/$client.production/public_html;
# set the port used for the clients fastcgi pool
if ($client = "belmond") { set $port 9000; }
if ($client = "freeboard") { set $port 9001; }
if ($client = "pmhs") { set $port 9002; }
if ($client = "vesta") { set $port 9003; }
#return 200 $document_root$uri;
# nginx pass to php fastcgi - serve client web
#location ~ [^/]\.php(/|$) {
#}
}
location @fastcgi_proxy {
fastcgi_split_path_info ^(.+?\.php)(.*)$;
set $orig_path $fastcgi_path_info;
try_files $fastcgi_script_name =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $orig_path;
fastcgi_param PATH_TRANSLATED $document_root$orig_path;
set $temp "/var/lib/php/fpm/session";
fastcgi_param TEMP $temp;
fastcgi_read_timeout 500;
fastcgi_ignore_client_abort on;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_buffer_size 8k;
fastcgi_buffers 64 8k;
fastcgi_temp_file_write_size 256k;
}
## -------------------------------------------------
# redirect server error pages
# @ serve nginx static page(s) /50x.html
## -------------------------------------------------
error_page 500 502 503 504 /50x.html;
location = /50x.html {
try_files $uri $uri/;
}
}
我可以使用正则表达式捕获客户端位置,但随后根据我看到的情况开始为自己开始有点“模糊”。当我CURL到基本ip addy,这是预期的,返回Nginx'欢迎'页面。
现在,当我使用客户端名称传递相同的addy(返回200 $ document_root $ uri;取消注释)时,document_url已正确别名,但现在我有点暂时亏损。最后,我想让所有客户端站点都配置代理到php-fpm fastcgi代理服务(这就是为什么定义了$ port代码,但尚未使用)。
正在寻找关于如何清理它并使其正常工作的任何方向等,同时在此过程中进一步了解Nginx配置......
目标是什么,这是主IP地址(目前按此配置工作):
URL = xxx.xxx.xxx.76 or xxx.xxx.xxx.76/
[serve] /usr/share/nginx/html/(*.html) content
[from] root /usr/share/nginx/html;
(需要确定如何从其服务器目录提供客户端站点)
URL = xxx.xxx.xxx.76/pmhs or xxx.xxx.xxx.76/pmhs/
[serve] /srv/www/pmhs.production/public_html/(*.php)
[from] root srv/www/pmhs.production/public_html;
URL = xxx.xxx.xxx.76/acme or xxx.xxx.xxx.76/acme/
[serve] /srv/www/acme.production/public_html/(*.php)
[from ] root srv/www/acme.production/public_html;
这有什么意义吗?我觉得我很接近,但我不知道是不是这样。
答案 0 :(得分:0)
好吧,纠正这个特定配置的底线是在我注意到&#39;客户端&#39;中发生了什么后,更改了服务器上的文件路径。位置块。这是最终的配置块代码:
## -------------------------------------------------
# client website location block
## -------------------------------------------------
location ~ ^\/(?<client>[\w-_]+) {
# reset the document root for client sites
root /srv/www;
# nginx pass to php fastcgi - serve client web
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(.*)$;
set $original_path $fastcgi_path_info;
# set the port used for the clients fastcgi pool
if ($client = "phms") { set $port 9000; }
if ($client = "vesta") { set $port 9001; }
try_files $fastcgi_script_name =404;
fastcgi_pass 127.0.0.1:$port;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $original_path;
fastcgi_param PATH_TRANSLATED $document_root$original_path;
set $temp "/var/lib/php/fpm/session";
fastcgi_param TEMP $temp;
fastcgi_read_timeout 500;
fastcgi_ignore_client_abort on;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_buffer_size 8k;
fastcgi_buffers 64 8k;
fastcgi_temp_file_write_size 256k;
}
}
为了简洁起见,它真的归结为根据我注意到的调试值对文档根文件路径进行更改。我本来可以找到原来的工作路线,但这需要一个真正的努力,我们没有分配时间 - 我也不愿意在这一点上打击市政厅#39;与nginx一起使用内部客户端文件系统定义。
最重要的是,它正在工作......对于任何关注这个问题的php-fpm开发者而言,一个重要的注意事项,每个客户端的php-fpm池文件都需要使用的特定端口&#39;听&#39;参数在配置中被镜像&#39;如果&#39;下面的$ port变量的代码。
感谢需要为投入做出贡献的每个人的感谢!