Настройка редиректа с помощью Nginx на VPS
Чтобы сделать редирект с помощью nginx, необходимо изменить файл конфигурации nginx.conf.
Если у вас настроены виртуальные хосты, файл конфигурации для каждого хоста нужно редактировать отдельно.
Редирект добавляется в секцию server в конфигурационном файле. Пример редиректа на https:
Редирект с http на https-протокол
Если у вас подключен SSL-сертификат для домена, вам необходимо настроить https-протокол. Для редиректа с http на https в файл конфигурации необходимо добавить следующий код:
server { #... if ($scheme = http) { return 301 https://$server_name$request_uri; } #... }
Редирект с https на http-протокол
Обратный пример конфигурации для редиректа с https на http:
server { #... server_name yourdomain.ru www.yourdomain.ru; return 301 http://$server_name$request_uri; #./])$ $1/ permanent; #... }
Перезагрузите Nginx
После внесения изменений в файл конфигурации для домена необходимо перезапустить nginx. Для перезапуска выполните следующую команду: service nginx restart
Проверить корректность конфигурационного файла можно с помощью команды: nginx -t
Закажите сервер с чистой CentOS или панелью управления ISPmanager всего за пару минут.
Купить серверПомогла ли вам статья?Да
раз уже
помогла
Пожалуйста, включите JavaScript для корректной работы этой страницы. Как включить JavaScript
Настройка редиректа с помощью Nginx на VPS
Представьте, что вам нужно изменить адрес сайта. Например, вы выбрали домен покороче или сделали ребрендинг, поэтому прежнее имя неактуально. Проблема в том, что люди будут продолжать заходить на старый сайт: по привычке или по размещённым ранее ссылкам.
Чтобы люди всё же попадали на нужную страничку, нужно настроить автоматическую переадресацию пользователя с одного URL-адреса на другой. Проще всего выполнить редирект Nginx на VPS.
Виды переадресаций
У перенаправлений могут быть разные HTTP-статусы в зависимости от ситуации, целей, задач. По их кодам браузеры и поисковики распознают вид редиректа.
Редирект 301
Настраивать с помощью Nginx 301 редирект нужно в том случае, если сайт навсегда переходит на другой домен и уже не вернётся на старый. В этом случае браузер совершает новый запрос, чтобы перевести пользователя на нужную страницу.
Если всё сделать правильно, никаких задержек и сложностей не будет, человек даже не заметит, что находится на другом веб-адресе. В случае ошибок выскочит ошибка 404.
Редирект 302
Он используется, когда нужно выполнить переадресацию на временную страницу. Например, в интернет-магазине закончился товар, а пользователю показывают другой с аналогичными характеристиками.
Важно отметить, что поисковики в этом случае старую страницу-донора исключают из выдачи, поскольку роботы видят полное дублирование.
Редиректы 303 и 307
Редирект nginx с кодом 303 или 307 настраивается, когда нужно направить пользователя на страницу, которая частично заменяет запрошенную, но не имеет точного ответа. Это тоже решение для временной переадресации, при которой сохраняются параметры страницы-донора.
Команды для настройки редиректа
Чтобы выполнить переадресацию, нужно внести изменения в конфигурационный файл nginx.conf в каждом хосте. Если есть виртуальные хосты, аналогичные действия придётся выполнить для всех.
Вставить редирект нужно в секцию server.
Теперь рассмотрим примеры для нескольких ситуаций.
С http на https
Nginx редирект на https актуален, когда подключен SSL-сертификат.
server {
#…
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
#…
}
С https на http
server {
#…
server_name yourdomain.ru www.yourdomain.ru;
return 301 http://$server_name$request_uri;
#. /])$ $1/ permanent;
#…
}
После изменения в conf перезапустите nginx с помощью команды
service nginx restart
чтобы проверить конфигурацию, выполните проверку.
nginx -t
Nginx: что вызывает перенаправление 301?
Задавать вопрос
спросил
Изменено 4 года, 4 месяца назад
Просмотрено 4к раз
Я до сих пор не знаю, почему моя веб-страница показывает
myapp.com перенаправлял вас слишком много раз.
Nginx используется только в качестве прокси для моего приложения каналов django, которое работает с daphne.
Nginx работает без ошибок.
myapp systemd[1]: запуск высокопроизводительного веб-сервера и обратного прокси-сервера. ..
Дафна работает на 127.0.0.1:8001
curl -I http://myapp.com/ завиток-я https://myapp.com/
возвращает
HTTP/1.1 301 Перемещено навсегда Сервер: nginx Дата: вторник, 05 марта 2019 г.11:53:39 по Гринвичу Тип содержимого: текст/html Длина контента: 178 Соединение: Keep-alive Адрес: https://myapp.com/ HTTP/1.1 301 перемещен навсегда Сервер: nginx/1.10.3 (Ubuntu) Дата: вторник, 05 марта 2019 г., 11:54:43 по Гринвичу Тип содержимого: текст/html Длина контента: 194 Адрес: https://myapp.com/ Соединение: Keep-alive
Кто-нибудь знает, что вызывает эту ошибку 301?
Конфигурационный файл Nginx
сервер { слушать 80; имя сервера myapp.com www.myapp.com; серверные токены отключены; вернуть 301 https://$servername$requesturi; } сервер { слушать 443 ssl; # под управлением Certbot имя_сервера myapp.com www.myapp.com; ssl_certificate /etc/letsencrypt/live/myapp.com/fullchain.pem; # под управлением Certbot ssl_certificate_key /etc/letsencrypt/live/myapp. com/privkey.pem; # под управлением Certbot включить /etc/letsencrypt/options-ssl-nginx.conf; # под управлением Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # под управлением Certbot корень /home/me/myapp/src/myapp; location = /favicon.ico { access_log off; log_not_found выключен; } местоположение /статическое/ { корень /home/me/myapp/src/myapp; } местоположение /медиа/ { корень /home/me/myapp/src/myapp; } расположение / { try_files $uri/ @python_django; } местоположение @python_django { прокси_пасс http://127.0.0.1:8001; proxy_pass_request_headers включен; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Хост $http_host; proxy_set_header X-Forwarded-Proto $ схема; прокси_перенаправление выключено; } }
- nginx
- перенаправление
- http-status-code-301
- daphne
Я до сих пор не знаю, как это исправить полностью, но когда я вынимаю
, возвращаю 301 https://$имя_сервера$ запрос_ури;
и запустить curl -I -L http://www. myapp.com/
я получаю
HTTP/1.1 200 ОК Сервер: nginx Дата: вторник, 05 марта 2019 г., 13:33:42 по Гринвичу Тип содержимого: текст/html Длина содержимого: 612 Последнее изменение: Вт, 31 января 2017 г., 15:01:11 GMT Соединение: Keep-alive ETag: "5890a6b7-264" Допустимые диапазоны: байты
Но я не могу получить доступ к странице, потому что, очевидно, LetsEncrypt перенаправляет все http
на https
, поэтому я возвращаюсь на страницу ошибки 301!
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя адрес электронной почты и парольОпубликовать как гость
Электронная почтаТребуется, но никогда не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
301 Перенаправление с помощью nginx — Ошибка сервера
Я переместил URL-адреса своего веб-сайта из этой формы:
https://example.com/category/sub-category/post-url https://example.com/category/post-url
в эту форму:
https://example.com/post-url
И я хотел бы настроить перенаправление nginx, чтобы не терять посетителей, проходящих по старым URL-адресам.
Я нашел регулярное выражение, которое мне нужно использовать, это просто 9\/]+$) (Взять весь текст после последней косой черты). Но как я могу настроить его для использования с nginx?
Это вывод nginx -T
:
root@ubuntu:~# nginx -T nginx: синтаксис файла конфигурации /etc/nginx/nginx.conf в порядке nginx: проверка файла конфигурации /etc/nginx/nginx.conf прошла успешно # файл конфигурации /etc/nginx/nginx.conf: www-данные пользователя; рабочие_процессы авто; pid /run/nginx. pid; события { worker_connections 1000; # multi_accept on; } http { ## # Базовые настройки ## client_max_body_size 30M; отправить файл включен; tcp_nopush включен; tcp_nodelay включен; keepalive_timeout 65; типы_хэш_макс_размер 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; включить /etc/nginx/mime.types; default_type application/octet-stream; gzip включен; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; gzip_vary включен; gzip_types текст/обычный текст/текст css/изображение javascript/изображение svg+xml/приложение x-icon/приложение javascript/x-javascript; ## # Настройки SSL ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Удаление SSLv3, ссылка: POODLE ssl_prefer_server_ciphers включен; ## # Настройки ведения журнала ## журнал_доступа /var/log/nginx/access.log; журнал_ошибок /var/log/nginx/error.log; ## # Настройки Gzip ## # gzip_proxyed любой; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1. 1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Конфигурации виртуального хоста ## включить /etc/nginx/conf.d/*.conf; включить /etc/nginx/sites-enabled/*; } #почта { # # См. пример сценария аутентификации по адресу: # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript # # # auth_http localhost/auth.php; # # pop3_capabilities "TOP" "USER"; # # imap_capabilities "IMAP4rev1" "UIDPLUS"; # # сервер { # слушать localhost:110; # протокол pop3; # прокси включен; # } # # сервер { # слушать localhost:143; # протокол imap; # прокси включен; # } #} # файл конфигурации /etc/nginx/mime.types: типы { текст/html html htm shtml; текст/CSS CSS; текст/xml xml; изображение/gif gif; изображение/jpeg jpeg jpg; приложение/javascript js; приложение/атом+xml атом; приложение/rss+xml rss; текст/математика ммл; текст/простой текст; текст/vnd.sun.j2me.app-дескриптор jad; текст/vnd.wap.wml wml; текст/x-компонент htc; изображение/png png; изображение/tiff tif tiff; изображение/vnd.wap.wbmp wbmp; изображение/значок x ico; изображение/x-jng jng; изображение/x-ms-bmp bmp; изображение/svg+xml svg svgz; изображение/веб-сайт; приложение/шрифт-woff woff; приложение/java-архив jar war ear; приложение/json json; приложение/mac-binhex40 hqx; документ приложения/msword; заявка/pdf pdf; приложение/постскриптум ps eps ai; приложение/rtf rtf; приложение /vnd.apple.mpegurl m3u8; приложение/vnd.ms-excel xls; приложение /vnd.ms-fontobject eot; приложение /vnd.ms-powerpoint ppt; приложение /vnd.wap.wmlc wmlc; application/vnd.google-earth.kml+xml кмл; application/vnd.google-earth.kmz кмз; приложение /x-7z-сжатый 7z; приложение /x-cocoa cco; приложение/x-java-архив-diff jardiff; приложение/x-java-jnlp-файл jnlp; запуск приложения /x-makeself; приложение/x-perl pl pm; приложение/x-pilot prc pdb; приложение /x-rar-сжатый rar; application/x-redhat-package-manager об/мин; приложение /х-море море; приложение /x-shockwave-flash swf; приложение /x-stuffit сидеть; приложение/x-tcl tcl tk; приложение/x-x509-ca-cert der pem crt; приложение /x-xpinstall xpi; приложение/xhtml+xml xhtml; приложение/xspf+xml xspf; приложение/zip-архив; приложение/октет-поток bin exe dll; приложение/октетный поток deb; приложение/октет-поток dmg; приложение/октетный поток iso img; приложение/октет-поток msi msp msm; приложение/vnd. openxmlformats-officedocument.wordprocessingml.document docx; приложение/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; приложение/vnd.openxmlformats-officedocument.presentationml.presentation pptx; аудио/миди мид миди кар; аудио/мпег мп3; аудио/огг огг; аудио/x-m4a m4a; аудио/x-realaudio ra; видео/3gpp 3gpp 3gp; видео/mp2t ц; видео/mp4 mp4; видео/mpeg mpeg mpeg mpg; видео/быстрое перемещение; видео/вебм вебм; видео/x-flv flv; видео/x-m4v m4v; видео/x-мнг мнг; видео/x-ms-asf asx asf; видео/x-ms-wmv wmv; видео/x-msvideo avi; } # файл конфигурации /etc/nginx/sites-enabled/default: сервер { корень /var/www/example.com; индекс index.php; имя_сервера пример.com; расположение / { try_files $uri $uri/ /index.php?q=$uri&$args; } расположение ~ \.php$ { включить фрагменты/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } расположение ~ ^/(?:[^/]+)(?:/[^/]+)?/(? . (.+?\.php)(/.*)$; # Проверяем существование PHP-скрипта перед его передачей try_files $fastcgi_script_name = 404; # Обойти тот факт, что try_files сбрасывает $fastcgi_path_info # см.: http://trac.nginx.org/nginx/ticket/321 установить $path_info $fastcgi_path_info; fastcgi_param PATH_INFO $path_info; fastcgi_index index.php; включить fastcgi.conf; # файл конфигурации /etc/nginx/fastcgi.conf: fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $схема; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param ИМЯ_СЕРВЕРА $server_name; # Только PHP, требуется, если PHP был собран с --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; # файл конфигурации /etc/letsencrypt/options-ssl-nginx. conf: # Этот файл содержит важные параметры безопасности. Если вы измените этот файл # вручную, Certbot не сможет автоматически обеспечивать безопасность в будущем # обновления. Вместо этого Certbot напечатает и зарегистрирует сообщение об ошибке с указанием пути к # актуальный файл, на который вам нужно будет ссылаться при ручном обновлении # этот файл. общий ssl_session_cache: le_nginx_SSL: 10 м; ssl_session_timeout 1440 м; ssl_session_tickets выключен; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers выключен; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA"; # файл конфигурации /var/www/outpost.example.com/.nginx.conf: # Передать запросы, которые не ссылаются напрямую на файлы в файловой системе, в index.php расположение / { try_files $uri $uri/ /index.php?$query_string; } # Следующие директивы основаны на рекомендациях H5BP Nginx Server Configs. # https://github.com/h5bp/server-configs-nginx # Срок действия правил для статического контента расположение ~* \.(?:манифест|appcache|html?|xml|json)$ { add_header Cache-Control "max-age=0"; } расположение ~* \.(?:rss|атом)$ { add_header Cache-Control "max-age=3600"; } расположение ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { add_header Cache-Control "max-age=2592000"; доступ_лог выключен; } расположение ~* \.(?:css|js)$ { add_header Cache-Control "max-age=31536000"; доступ_лог выключен; } расположение ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { add_header Cache-Control "max-age=2592000"; доступ_лог выключен; } # Gzip-сжатие gzip включен; gzip_comp_level 5; gzip_min_length 256; gzip_proxy любой; gzip_vary включен; gzip_types приложение/атом+xml приложение/javascript приложение/json приложение/ld+json приложение/манифест+json приложение/rss+xml приложение/vnd.geo+json приложение /vnd.ms-fontobject приложение/x-шрифт-ttf приложение/x-веб-приложение-манифест+json приложение/xhtml+xml приложение/xml шрифт/открытый тип изображение/bmp изображение/svg+xml изображение/x-значок текст/кэш-манифест текст/CSS текст/обычный текст/визитная карточка текст /vnd.