Назад | Перейти на главную страницу

Строка запроса заставляет блок местоположения nginx не запускаться

У меня есть такая конфигурация nginx:

server {
    listen 80;
    listen [::]:80;

    root /var/www/pics;
    index index.html index.htm index.nginx-debian.html index.php;

    server_name photos.test.com;

    location /storage/raw/ {
        return 418;
    }
    #error_page 404 /index.html;


    location ^~ /api {
        client_max_body_size 500M;
        try_files $uri.php$is_args$query_string $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
        try_files $uri $uri/ /index.html =404;
        tcp_nodelay off;
        open_file_cache max=3000 inactive=120s;
        open_file_cache_valid 45s;
        open_file_cache_min_uses 2;
        open_file_cache_errors off;
    }

    location = /index.html {
        expires 30s;
    }
}

Мне нужны все запросы, которые находятся в каталоге api (https://photos.test.com/api/*) для отправки на php для обработки. У меня есть каталог для хранения моих фотографий, и он ограничен как таковой. Если запрос относится к несуществующему файлу, он должен получить ответ 200 и вернуть содержимое index.html. Я использую nuxt generate для создания моих файлов, но у меня есть динамические маршруты, и я не хочу иметь отдельный процесс только для их обработки - поэтому, если он не может его найти, он просто переходит к index.html.

Все работает нормально ... но если я попытаюсь добавить строку запроса к любому запросу в моем API ... это просто 404: Работает: http://photo.test.com/api/albums/list Не работает: http://photo.test.com/api/albums/list?filter=1

У меня нет идей. я использовал add_header в моем блоке местоположения / api, чтобы проверить, попал ли он в блок - без строки запроса он проходит нормально, и появляется мой тестовый заголовок. В строке запроса мой заголовок отладки отсутствует.

Мой вывод nginx -V:

nginx version: nginx/1.18.0
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)
built with OpenSSL 1.1.1g  21 Apr 2020
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --user=nginx --group=nginx --with-cc-opt=-Wno-deprecated-declarations --with-cc-opt=-Wno-ignored-qualifiers --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_mp4_module --with-http_auth_request_module --with-http_slice_module --with-http_stub_status_module --with-http_realip_module --with-http_sub_module --add-module=/usr/local/src/nginx/modules/incubator-pagespeed-ngx-1.13.35.2-stable --add-module=/usr/local/src/nginx/modules/ngx_brotli --add-module=/usr/local/src/nginx/modules/headers-more-nginx-module-0.33 --add-module=/usr/local/src/nginx/modules/ngx_cache_purge --with-http_dav_module --add-module=/usr/local/src/nginx/modules/nginx-dav-ext-module```