web-dev-qa-db-ja.com

NGINXはif句でrootディレクティブを使用します

ポート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;
}
1

Server_nameディレクティブを使用して、さまざまな$ Host変数を区別できることがわかりました。とにかく助けてくれてありがとう!

0

サーバーが同じホストで動作するDockerコンテナと接続していないようです。あなたの例では、127.0.0.1:8089へのリクエストを処理するアップストリームlaradockがあります。

Dockerコンテナがこのポートを公開していることを確認してください。そうすれば、Webサーバーが実行されているホストからDockerコンテナに正常にリクエストを送信できます。

curl http://127.0.0.1:8089
0
Victor Perov