我正在使用Linux Mint 18.2和docker。 目前我有2个来自bitnami的docker容器,1个用于nginx,另一个用于php-fpm。 这是我用于nginx的docker-compose配置:
version: '2'
services:
nginx:
image: 'bitnami/nginx:latest'
group_add:
- www-data
restart: always
labels:
kompose.service.type: nodeport
ports:
- '80:8080'
- '443:8443'
volumes:
- 'nginx_data:/bitnami'
- ~/Documents/nginx/nginx.conf:/bitnami/nginx/conf/nginx.conf:ro
- ~/Documents/nginx/my_vhost.conf:/bitnami/nginx/conf/vhosts/my_vhost.conf:ro
- /usr/share/nginx/html:/app
volumes:
nginx_data:
driver: local
这是我的docker-compose.yml for php-fpm:
version: '2'
services:
php:
tty: true # Enables debugging capabilities when attached to this container.
image: 'bitnami/php-fpm:latest'
labels:
kompose.service.type: nodeport
ports:
- 9000:9000
volumes:
- /usr/share/nginx/html:/app
- ~/Documents/nginx/nginx.conf:/bitnami/nginx/conf/nginx.conf:ro
- ~/Documents/nginx/my_vhost.conf:/bitnami/nginx/conf/vhosts/my_vhost.conf
另外,这是我的nginx配置:
server {
listen 0.0.0.0:8080;
server_name localhost;
root /app;
index index.htm index.html;
location /evodms {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# root /usr/share/nginx/html;
# root /var/www/html/evodms;
try_files $uri $uri/ /evodms/index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
我已经启动了所有容器和nginx容器生成的用户1001,因此我将此用户映射到www-data,FYI,我的evodms文件夹所有权已设置为www-data。 但我收到了这条消息:
nginx_1 | 2017/10/14 06:12:39 [error] 25#0: *1 directory index of "/app/evodms/" is forbidden, client: 172.20.0.1, server: localhost, request: "GET /evodms/ HTTP/1.1", host: "localhost"
nginx_1 | 172.20.0.1 - - [14/Oct/2017:06:12:39 +0000] "GET /evodms/ HTTP/1.1" 403 198 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
有任何线索吗?
答案 0 :(得分:0)
你的nginx尝试在evodms文件夹中找到index.html。因为您在根选项下将索引设置为index index.htm index.html
。
我猜你的evodms存在于你的公共文件夹下吗?
如果你设置这样的位置路径。
location /evodms {
try_files $uri $uri/ /evodms/index.php?$args;
}
看看try_files。订单是$ uri然后$ uri /。 nginx会检查url / evodms /是否是文件夹?如果是,请退货。但如果不是,nginx将尝试其他选项。
如何检查。 首先,尝试在evodms文件夹中添加文件index.html。如果您访问它,它将显示在您的页面中,因为nginx成功将evodms定义为文件夹。
或从$uri/
中取出try_files
。所以nginx想尝试将evodms定义为文件夹。它将直接重写为下一个选项。这是evodms/index.php?$args
。
答案 1 :(得分:0)
来自nginx配置的/evodms
的位置适用于所有请求从/evodms
开始,因此,例如,当您请求/evodms/test
时,nginx首先尝试/app/evodms/test
个文件,然后/app/evodms/test/
文件夹,最后尝试/app/evodms/index.php?$args
。
但是当您请求/evodms/
时,它会尝试/app/evodms/
,/
位置/evodms
。在这种情况下,nginx会尝试在index
选项中定义的索引文件。您的index.html
文件夹中似乎没有index.htm
和/app/evodms
,因此您会收到403禁止错误。
为了将请求修复为<your_domain>/evodms/
,您应该将index.php
添加到索引文件列表中:
index index.htm index.html index.php;