Nginx: `proxy_pass` Без Слеша В Конце

URL-адреса со слешем в конце и без него рассматриваются веб-серверами, а также поисковыми системами как различные веб-страницы.

По этой причине URL-адреса оканчивающиеся слешем могут возвращать ошибку 404 Not Found, в то время как без него они могут быть вполне доступны.

В этой заметке я покажу, как убирать слеш в конце URL в Nginx и делать proxy_pass трафика без него.

Дельный Совет: Reload Nginx внутри Docker-контейнера! Читать далее →

`proxy_pass` в Nginx Без Слеша В Конце

Добавьте следующее rewrite-правило в секции server конфигурационного файла Nginx для удаления слеша в конце всех URL и перенаправления трафика с помощью proxy_pass в upstream-кластер:

server {
  listen 80;
  server_name example.tld;

  # Remove trailing slash from URLs
  rewrite ^/(.*)/$ /$1 permanent;

  location / {
      proxy_pass         http://$upstream;
      proxy_redirect     off;
  }
}

Правило, приведенное выше, делает 301 Moved Permanently редирект со всех URL-адресов оканчивающихся слешем на те же самые URL без слеша в конце:

$ curl -IL http://example.tld/path/
HTTP/1.1 301 Moved Permanently
server: nginx
location: http://example.tld/path
...
HTTP/1.1 200 
server: nginx
...