Как заблокировать доступ к неправильному url на nginx?
Всем доброго времени суток. Я новичок в работе с nginx'ом и сейчас возникла ситуация, с которой не знаю как разобраться (гуглить пробовал, но ничего не нашел, может неправильно искал)
Ситуация следующая:
есть сайт (mydomain.ru), который находится хостинге, также есть сайты (mail.mydomain.ru и a2nta.mydomain.ru), которые хостятся локально
через cloudflare dns раньше было выстроено, что mydomain.ru отправляется на IP хостинга, а mail отправляется на наш IP)
сейчас возникла проблема, что nginx по url main.mydomain.ru открывается содержимое a2nta.mydomain.ru (днс запись из cloudflare пока не убирали, вероятно позднее потребуется вновь).
Вопрос: как запретить открываться сайту a2nta через mail?
конфиг a2nta.mydomain.ru выглядит так
server { listen 172.16.1.166:80; server_name a2nta.mydomain.ru www.a2nta.mydomain.ru; return 301 https://$host$request_uri; } server { listen 172.16.1.166:443 ssl; root /var/www/puper; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name a2nta.mydomain.ru www.a2nta.mydomain.ru; ssl_certificate /home/ubuntu/puper.crt; ssl_certificate_key /home/ubuntu/puper.key; location / { proxy_pass https://172.16.0.102/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } |
server { listen 172.16.1.166:80; server_name a2nta.mydomain.ru www.a2nta.mydomain.ru; return 301 https://$host$request_uri; } server { listen 172.16.1.166:443 ssl; root /var/www/puper; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name a2nta.mydomain.ru www.a2nta.mydomain.ru; ssl_certificate /home/ubuntu/puper.crt; ssl_certificate_key /home/ubuntu/puper.key; location / { proxy_pass https://172.16.0.102/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
конфиг default от самого nginx:
server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration # listen 443 ssl default_server; listen [::]:443 ssl default_server; ssl_certificate /home/ubuntu/puper.crt; ssl_certificate_key /home/ubuntu/puper.key; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } } |
server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration # listen 443 ssl default_server; listen [::]:443 ssl default_server; ssl_certificate /home/ubuntu/puper.crt; ssl_certificate_key /home/ubuntu/puper.key; root /var/www/html; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } }
Дополнительно:
Ответы:
Завести отдельный серверный блок с server_name main.mydomain.ru - и настроить там редирект или отдачу нужной ошибки.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для блокировки доступа к определенному URL на сервере Nginx, можно воспользоваться директивой `location` в конфигурационном файле сервера.
Прежде всего, необходимо открыть конфигурационный файл Nginx, который обычно находится в директории `/etc/nginx/sites-available/` или `/etc/nginx/conf.d/`.
Затем добавляем следующий блок конфигурации внутри блока `server`:
server { ... location /неправильный_url { deny all; return 403; } ... }
В данном примере, мы используем директиву `location` для указания URL, к которому нужно запретить доступ. Директива `deny all;` блокирует доступ к этому URL для всех пользователей, а `return 403;` отправляет клиенту ошибку 403 (Forbidden), если он попытается получить доступ к данному URL.
После внесения изменений в конфигурационный файл, необходимо перезапустить сервер Nginx командой `sudo systemctl restart nginx`.
Теперь доступ к указанному URL будет заблокирован для всех пользователей, и они будут получать ошибку 403 при попытке доступа к нему.