我有一个 NGINX docker 容器,它在端口 8089 接收请求(由我主系统上的 NGINX 反向代理)。然后它应该检索 $host 变量以确定要提供的正确根目录。在我的错误日志中,NGINX 抱怨“此处不允许使用 Root 指令”。
我怎样才能实现相同的效果而不出现任何错误?
这是我的 NGINX 配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
set $handle 0;
if ($host = 'lsg.example.com') {
set $handle 2;
}
if ($host = 'www.example.com') {
set $handle 1;
}
if ($handle = 0) {
return 501;
}
if ($handle = 1) {
root /var/www/laravel/public; #root directive not allowed here
index index.php index.html index.htm;
}
if ($handle = 2) {
root /var/www/pizza/public;
index index.php index.html index.htm;
}
# Laravel params:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
}
error_log /var/log/nginx/laravel_error.log;
access_log /var/log/nginx/laravel_access.log;
}
答案1
似乎您的服务器没有与在同一主机上运行的 docker 容器建立连接。在您的示例中,您有上游 laradock,它为 提供请求127.0.0.1:8089
。
确保您的 Docker 容器公开此端口,并且您可以从运行 Web 服务器的主机向其发出成功的请求:
curl http://127.0.0.1:8089
答案2
事实证明,我只能使用 server_name 指令来区分不同的 $host 变量。无论如何,感谢您的帮助!