Я ищу небольшой совет для новичка в nginx. Я читал, что операторы if в nginx работают очень медленно, поэтому я надеялся на небольшую помощь в их преобразовании. Я перепробовал кучу разных методов, все безуспешно, поэтому я решил задать вопрос.
server_name *.noconformity.co noconformity.co;
# remove all sub domains and www
if ($http_host !~* "^(ftp|ssh)\.noconformity\.co$"){
set $rule_0 1$rule_0;
}
if ($http_host ~ "^([^.]+)\.noconformity\.co$"){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
break;
}
# Login Short Cut
if ($uri ~* "/login") {
rewrite ^/login(/.*)? /wp-admin$1;
}
решение1
Полностью не проверено — вполне вероятно, что есть ошибки — но, надеюсь, концепция верна.
Приведенная ниже конфигурация основана на том, как я понимаю вашу цель: перенаправить все поддомены, кроме «ftp» и «ssh», на основной сайт; перенаправить /login на /wp-admin
Создайте блок сервера для приема подключений к поддоменам ftp и ssh, а затем сделайте здесь что-нибудь (например, отклоните или верните 403 и т. д.) — поскольку это статическое имя_сервера, оно имеет приоритет над подстановочным именем_сервера.
server {
server_name ftp.noconformity.co ssh.noconformity.co;
#additional options
}
Ваш основной блок сервера — добавьте вашу переписку в блок местоположения
server{
server_name noconformity.co;
#root ....;
#your main config
location ~* /login/ {
rewrite ^/login/(.*)? /wp-admin$1;
}
}
{Мне пришлось изменить перезапись /login/, чтобы избежать зацикливания со встроенным в WP перенаправлением входа}
Наконец, подстановочный символ server_name — он будет соответствовать любому поддомену (кроме уже сопоставленных), захватит путь и перепишет на ваш основной сайт.
server {
server_name *.noconformity.co;
rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
}
Nginx-серверстраница на server_namesстоит прочитать, так как в нем объясняется приоритет различных выражений server_name.
решение2
Лучшим ответом на этот вопрос будет использованиеМодуль HTTP-карты. Ваш пример выше почти такой же, как и тот, который они продемонстрировали. Гораздо чище и проще в управлении.