92415


Nginxで1ドメインで複数のアプリを公開する場合の設定方法について助言をお願いしたく思います。  
例えば、wordpressとredmineの2つを公開するとします（ここではwordpressのみ設定）。  
以下の設定内容ではエラーが発生していますが、間違っている点は何でしょうか？  
ちなみに以下の設定内容から下リストの点を修正すると１アプリのみ公開設定としては無事公開できました。

  * /wp/を/とする
  * ネストlocationで外側のlocationを削除する

環境：  
OS:CentOS Stream8  
Nginx：1.14.1-9

エラー内容：

[code]

    [error] 2931#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: (ip), server: _, request: "GET /wp/ HTTP/2.0", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "(domain)"
    
[/code]

設定内容：

[code]

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
    
        index index.php index.html
        root         /usr/share/nginx/html;
    
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        # SSL設定省略
    
        # WordPress
        location ^~ /wp {
            # ドキュメントルート
            root /var/www/wp/;
    
            location = /wp/wp-config.php {
            deny all;
            }
    
            # /wp/でアクセスすると/index.phpへ.
            location /wp/ {
            rewrite /wp/(.*)$ /$1 break;
            try_files $uri $uri/ /index.php$is_args$args;
            }
    
            # どこもここで処理される(/wp/を含め).
            location ~ /wp/.+\.php$ {
            rewrite /wp/(.*)$ /$1 break;
            include fastcgi.conf;
            fastcgi_pass   unix:/run/php-fpm/www.sock;
            }
        }
    
        error_page 404 /404.html;
            location = /40x.html {
        }
    
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    
[/code]

確認済みなもの：  
[/scriptsではなく$document_rootにする。](https://qiita.com/aioa/items/238d0e6e1997d35acc30)


CC BY-SA 4.0
2022-10-11T13:56:43.000
91550
2022-11-24T16:00:05.717
2022-10-11T16:21:33.887
53585
53585
question
nginx
Nginxの複数アプリ公開設定で公開できない


自己解決しました。

以下の2点の間違いがありました。

  1. phpファイルのrewriteで不用意に引数を追加していたこと。  
rewriteで$is_args$argsを記述していたため、リクエストがindex.php?p=1?p=1になっていました。

  2. phpファイル以外のファイル(CSSやJSなど)でファイルをrewrite設定していないこと。

以下の設定内容で公開できます。

[code]

    # WordPress
    location ^~ /wp/ {
            root /var/www/blog/;
            location = /wp/wp-config.php {
                    deny all;
            }
    
            # when access to "/wp/".
            location = /wp/ {
                    #rewrite /wp /wp/index.php$is_args$args;
                    rewrite /wp/ /wp/index.php;
            }
    
            # when access to php file below "/wp/".
            location ~ /wp/.+\.php.* {
                    rewrite /wp/(.*)$ /$1 break;
                    include fastcgi.conf;
                    fastcgi_pass   unix:/run/php-fpm/www.sock;
            }
    
            # when access to other file(css/js/etc.) below "/wp/".
            location ~ /wp/.+(?!php)$ {
                    rewrite /wp/(.*)$ /$1 break;
            }
    }
    
[/code]


CC BY-SA 4.0
2022-11-24T16:00:05.717
92415
2022-11-24T16:00:05.717
53585
91550
answer