Как добавить перенаправление (редирект) в Nginx?

Опубликовано в Веб-разработка

В Nginx правила редиректов задаются в конфигурационных файлах. Основной файл конфигурации Nginx обычно называется nginx.conf, а также могут использоваться отдельные файлы конфигурации для каждого сайта или приложения.

Для выполнения описанных ниже действий возможно понядобятся права суперпользователя root.

Для задания правил редиректов в Nginx, обычно используется блок server в конфигурационном файле. Вот пример простого правила редиректа в Nginx:

server {
    listen 80;
    server_name example.com;

    location /old-url {
        return 301 http://example.com/new-url;
    }
}

В этом примере, при попытке доступа к example.com/old-url, сервер будет выполнять 301-й редирект на example.com/new-url.

Более сложные правила редиректов можно комбинировать с использованием регулярных выражений и условий. Здесь приведен пример правила редиректа на основе условия:

server {
    listen 80;
    server_name example.com;

    location / {
        if ($args ~* "^param=value$") {
            return 301 http://example.com/new-url;
        }
    }
}

Этот пример показывает, как выполнить редирект на example.com/new-url только при наличии параметра param со значением value в URL.

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

Где в Nginx находятся отдельные файлы конфигурации для каждого сайта?

В Nginx отдельные файлы конфигурации для каждого сайта обычно хранятся в директории /etc/nginx/conf.d/.

По умолчанию, в основном конфигурационном файле nginx.conf находится директива include указывающая на папку, в которой находятся дополнительные файлы конфигурации. В Ubuntu или Debian, например, конфигурация может быть следующей:

include /etc/nginx/conf.d/*.conf;

Это означает, что все файлы с расширением .conf в директории /etc/nginx/conf.d/ будут включены в основной конфигурационный файл. Вы можете создать свои собственные файлы конфигурации в этой папке или добавить их туда для каждого сайта или приложения.

Вы также можете использовать поддиректории в /etc/nginx/conf.d/ для логической организации файлов конфигурации для каждого сайта. Nginx будет рекурсивно включать все файлы в поддиректориях, если они соответствуют директиве include.

После внесения изменений в файлы конфигурации, не забудьте перезапустить или перезагрузить сервер Nginx, чтобы изменения вступили в силу.

Как перезапустить или перезагрузить сервер Nginx?

Для перезапуска или перезагрузки сервера Nginx вы можете выполнить следующие команды в зависимости от операционной системы:

1. **Перезапуск**:

- В Ubuntu или Debian:

bash sudo service nginx restart

- В CentOS или RHEL:

bash sudo systemctl restart nginx

- В macOS (если вы используете Homebrew):

bash brew services restart nginx

2. **Перезагрузка**:

- В Ubuntu или Debian:

bash sudo service nginx reload

- В CentOS или RHEL:

bash sudo systemctl reload nginx

- В macOS (если вы используете Homebrew):

bash brew services reload nginx

Перезапуск полностью останавливает сервер Nginx, а затем запускает его заново с использованием внесенных изменений в конфигурацию. Перезагрузка применяет изменения в конфигурационных файлах без полного останова сервера.

Обратите внимание, что для выполнения этих команд, вам может потребоваться наличие прав администратора или использование команды sudo.

От Автора

В файле конфигурации сайта в блоке server можно через include подключить отдельный файл, где будут прописаны перенаправления.

Пример содержимого файла конфигурации /etc/nginx/sites-available/example.com.conf:

server {
listen 443 ssl http2;
server_name www.example.com;
root /home/www-root/public_html/example.com;
index index.php index.html index.htm;

# ssl_certificate /etc/ssl/example.com/examplecom.crt;
# ssl_certificate_key /etc/ssl/example.com/examplecom.key;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

# include /etc/nginx/default.d/001-restrict.conf;
include /etc/nginx/default.d/002-example-maintenance.conf;
include /etc/nginx/default.d/002-example-not-found.conf;
include /etc/nginx/default.d/003-letsencrypt.conf;
include /etc/nginx/default.d/004-locations-redirect-example-com.conf;
include /etc/nginx/default.d/005-locations-landing-pages-example-com.conf;
include /etc/nginx/default.d/008-phpmyadmin.conf;
}

В файле конфигурации задается путь к подключаемому файлу с перенаправлениями /etc/nginx/default.d/004-locations-redirect-example-com.conf.

Содержимое самого файла 004-locations-redirect-example-com.conf:

# Locations are evaluated in this order:
# 1. location = /path/file.ext {} Exact match
# 2. location ^~ /path/ {} Priority prefix match -> longest first
# 3. location ~ /Paths?/ {} (case-sensitive regexp)
# 4. location ~* /paths?/ {} (case-insensitive regexp) -> first match
# 5. location /path/ {} Prefix match -> longest first

location = /help/articles/old-url/ {
    return 301 https://www.example.com/help/;
}

После добавления правил возможно потребуется перезапустить или перезагрузить сервер Nginx.

Tags: Nginx .htaccess redirect 301 302 перенаправления редиректы