Nginx Перезаписать расположение на новые конечные точки API - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь переместить старые конечные точки API на новые конечные (описательные) конечные точки.Я попробовал приведенную ниже конфигурацию nginx для перезаписи старых запросов на новые конечные точки, но она не работает.Любая помощь будет высоко оценена.

    server {
        listen 80;
        root /path/to/api/entry/file;

        index index.php;

        server_name api.example.com;

    #Below not rewriting http://api.example.com/create/ to http://api.example.com/users/v1/create
    rewrite ^/create/ /users/v1/create last; 

        location / {
        try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                include fastcgi_params;

                fastcgi_buffer_size 128k;
                fastcgi_buffers 256 16k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_temp_file_write_size 256k;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                access_log /var/log/nginx/example_api-access.log;
                error_log /var/log/nginx/example_api-error.log;

                fastcgi_read_timeout 600;
        }

}

Примером того, чего я пытаюсь достичь, является перезапись http://api.example.com/create/ в http://api.example.com/users/v1/create и пересылка запроса в сценарий ввода (index.php), который загрузит необходимый контроллер для обработки запроса

1 Ответ

0 голосов
/ 10 декабря 2018

Ваш rewrite...last ничего не достигает, так как это внутренний процесс, который в конечном итоге заканчивается на /index.php.Ваш сценарий index.php использует исходный запрос (возможно, из параметра REQUEST_URI) для определения конечной точки API.

Необходимо выполнить внешнее перенаправление, используя rewrite...permanent, чтобы сделать его видимым для index.php.Подробнее см. в этом документе .

Например:

rewrite ^/create/ /users/v1/create permanent;

Или более эффективно, а также для работы с запросами POST и GET:

location /create/ { return 307 /users/v1/create$is_args$args; }

Если вы хотите поддерживать старый API без перенаправления, вам нужно будет одурачить index.php выделенным блоком местоположения, например:

location /create/ {
    include fastcgi_params;
    fastcgi_param REQUEST_URI     /users/v1/create;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;

    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Многие из ваших fastcgi директивможет быть перемещен во внешний блок, так что вам не нужно писать их дважды.Подробнее см. в этом документе .

...