Nginx 書き換えルール - マルチロケーション PHP

Nginx 書き換えルール - マルチロケーション PHP

1 つ完了、あと 1 つ! 以前の設定で何が間違っていたのかを完全に理解しました。Stack Overflow の Cemal にもう一度感謝したいと思います。/location/ に index.php が表示されるようになりました。

新たな問題は、書き換えルールです。現在、ルールはグローバルに設定されており、各場所で同じことを行う必要があります (重複した PHP フロントエンドですが、特定の項目へのアクセスが制限されています)。

現時点では、メインの domain.com は動作しますが、mydomain.com/test はメインの PHP をロードしますが、書き換えからのデータを渡しません。try ファイルで動作させる方法を見つけましたが、regex のアドバイスを使用して動作させるのに苦労しています。ここで見つかりました

現状では、試行せずに実行すると、これらのファイルが存在するにもかかわらず、nginx で raw_data または general_data を見つけることができないというエラーが発生するため、これは書き換えルールによるものであるとしか考えられません。

既存の書き換えルールを複製し、/test2/ をプレフィックスとして追加しましたが、それでも見つけることができません。

2018/02/27 13:37:46 [エラー] 31485#31485: *49483 open()

"/var/www/html/test2/general_data" failed (2: No such file or
directory), client: X.X.X.X, server: mydomain.co.uk, request: "POST
/test/weather_data?cell HTTP/1.1", host: "mydomain.co.uk", referrer:
"https://mydomain.co.uk/test2/" 2018/02/27 13:37:46 [error]
31485#31485: *49546 open() "/var/www/html/test/raw_data" failed (2: No
such file or directory), client: X.X.X.X, server: my domain.co.uk,
request: "POST /test/raw_data HTTP/1.1", host: "mydomain.co.uk",
referrer: "https://mydomain.co.uk/test2/"

とにかく、それが私をその結論に導いた誤りです。

これが私の現在の設定です関連する部分-

}server {

    rewrite ^/raw_data$ /raw_data.php?$1 last;
    rewrite ^/test_data$ /test_data.php?$1 last;
    rewrite ^/motd_data$ /motd_data.php?$1 last;
    rewrite ^/(.*)map.common.js$ /static/js/map.common.php last;
    rewrite ^/general_data$ /general_data.php?$1 last;

    rewrite ^test2/raw_data$ /test2/raw_data.php?$1 last;
    rewrite ^test2/test_data$ /test2/test_data.php?$1 last;
    rewrite ^test2/motd_data$ /test2/motd_data.php?$1 last;
    rewrite ^test2/(.*)map.common.js$ /PMSFE/static/js/map.common.php last;
    rewrite ^test2/general_data$ /PMSFE/general_data.php?$1 last;



    location / {
    include /etc/nginx/mime.types;
        index index.php index.html index.htm;
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
            fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
      }
    }

    location /test2 {
    include /etc/nginx/mime.types;
    root /var/www/html/;
        index index.php index.html index.htm;
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
            fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
      }
    }

これを機能させる方法についてのアドバイスをいただければ幸いです。Linux を使用するのは初めてで、何か本格的なものをホストするのは初めてです。残念ながら、周囲にある nginx の例は非常に異なるため、特定の状況に何が当てはまるかを判断するのは困難です。

別の投稿で見たように、各場所に書き換えルールを含めようとしましたが、これにより、新しいmydomain.co.uk/test2/と同じエラーが発生し、mydomain.co.ukページが壊れました。

答え1

本当にバカな私。書き直しが1つ足りない。

rewrite ^/test2/raw_data$ /test2/raw_data.php?$1 last;
rewrite ^/test2/test_data$ /test2/test_data.php?$1 last;
rewrite ^/test2/motd_data$ /test2/motd_data.php?$1 last;
rewrite ^/test2/(.*)map.common.js$ /PMSFE/static/js/map.common.php last;
rewrite ^/test2/general_data$ /PMSFE/general_data.php?$1 last;

動作するようになりました!

関連情報