ポート8089でリクエストを受信するNGINXDockerコンテナがあります(メインシステムのNGINXによってリバースプロキシされています)。次に、$ Host変数を取得して、提供する正しいルートディレクトリを決定する必要があります。私のエラーログで、NGINXは「ここではルートディレクティブは許可されていません」と文句を言っています。
エラーなしで同じことを達成するにはどうすればよいですか?
これが私の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;
}
Server_nameディレクティブを使用して、さまざまな$ Host変数を区別できることがわかりました。とにかく助けてくれてありがとう!
サーバーが同じホストで動作するDockerコンテナと接続していないようです。あなたの例では、127.0.0.1:8089
へのリクエストを処理するアップストリームlaradockがあります。
Dockerコンテナがこのポートを公開していることを確認してください。そうすれば、Webサーバーが実行されているホストからDockerコンテナに正常にリクエストを送信できます。
curl http://127.0.0.1:8089