[英]Docker nginx and php-fpm
I built some containers for our products(microservices based on php), and have a problem that I can't understand: 我为我们的产品(基于php的微服务)构建了一些容器,但有一个我无法理解的问题:
I have 3 containers: - nginx - php-fpm + code - php-fpm + code 我有3个容器:-nginx-php-fpm +代码-php-fpm +代码
Nginx is configured as reverse-proxy for php-fpm's: Nginx被配置为php-fpm的反向代理:
server {
listen 80;
#listen 443;
server_name 1.mydomain.com;
index index.php;
error_log /var/log/nginx/sso-error.log;
access_log /var/log/nginx/sso-access.log;
root /1;
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_pass php-fpm1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Expose-Headers' 'X-Domain-Token';
add_header 'Access-Control-Max-Age' 86400;
}
}
server {
listen 80;
#listen 443;
server_name 2.mydomain.com;
index index.php;
error_log /var/log/nginx/ajax-broker.error.log;
access_log /var/log/nginx/ajax-broker.access.log;
root /2;
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_pass php-fpm2:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Expose-Headers' 'X-Domain-Token';
add_header 'Access-Control-Max-Age' 86400;
}
}
If, I mount volumes with code from both php-fpm to nginx container - all works, however if I store code only in fpm container - nginx returns 404, also for *php URI's. 如果我将带有代码的卷从php-fpm装载到nginx容器-可以正常工作,但是,如果我仅将代码存储在fpm容器中-nginx会返回404,也适用于* php URI。
How can I setup nginx right without mounting. 我如何在不进行安装的情况下正确设置Nginx。
Well, after few experiments i found solution, you should add one more location and comment try_files in php section: 好吧,经过几次实验我找到了解决方案,您应该再添加一个位置并在php部分中注释try_files :
server {
listen 80;
#listen 443;
server_name 1.mydomain.com;
index index.php;
error_log /var/log/nginx/sso-error.log;
access_log /var/log/nginx/sso-access.log;
root /1;
location / {
try_files $uri $uri/index.php;
}
location ~ [^/]\.php(/|$) {
#try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_pass php-fpm1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization, Keep-Alive, User-Agent,
X-Requested-With, If-Modified-Since, Cache-Control, Content-Type';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Expose-Headers' 'X-Domain-Token';
add_header 'Access-Control-Max-Age' 86400;
}
}
server {
listen 80;
#listen 443;
server_name 2.mydomain.com;
index index.php;
error_log /var/log/nginx/ajax-broker.error.log;
access_log /var/log/nginx/ajax-broker.access.log;
root /2;
location / {
try_files $uri $uri/index.php;
}
location ~ [^/]\.php(/|$) {
#try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_pass php-fpm2:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'Authorization, Keep-Alive, User-Agent,
X-Requested-With, If-Modified-Since, Cache-Control, Content-Type';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Expose-Headers' 'X-Domain-Token';
add_header 'Access-Control-Max-Age' 86400;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.