У меня есть aws ec2 с эластичным ip и route53 с моим доменом и nginx на сервере, это работает нормально, но
Я видел, как работают другие сайты, amazon.com udemy.com. Если вы получаете доступ напрямую через общедоступный IP-адрес или общедоступный DNS, вы выдаете ошибку. Мой вопрос в том, как я могу настроить его так, чтобы он делал то же самое. пример: адрес браузера по домену: amazon.com = ok URL-адрес браузера по общедоступному IP-адресу: 52.222.137.64 = ошибка 400-403. URL-адрес браузера по общедоступному DNS: server-52-222-137-64.ams50.r.cloudfront.net = ошибка 400-403.
Адрес браузера по домену: example.com = ok URL-адрес браузера по общедоступному IP-адресу: 124.34.32.245 = ok. URL-адрес браузера по общедоступному DNS: ec2-124.34.32.245.eu-west-3.compute.amazonaws.com = ok.
Спасибо всем за вашу помощь. пример заменяет мой домен, это мой конфиг.
server {
listen 8089 ssl http2;
listen [::]:8089 ssl http2;
server_name example.com;
root /var/www/example.com/public;
# SSL
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/chain.pem;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# security
include nginxconfig.io/security.conf;
location / {
proxy_set_header Accept-Encoding "";
try_files $uri $uri/ /index.html;
}
# additional config
include nginxconfig.io/general.conf;
}
server {
listen 8080;
listen [::]:8080;
server_name example.com;
include nginxconfig.io/letsencrypt.conf;
location / {
return 301 https://example.com$request_uri;
}
}
Я забыл упомянуть, что я также использую докер, я не знаю, будет ли это иметь какое-то отношение к этому.
Какое имя сервера настроено в вашей конфигурации nginx?
Http://nginx.org/en/docs/http/server_names.html
Если вы укажете фактическое имя, вы сможете отклонить запрос, если имя не используется.
Я придумал это решение, прежде чем спрашивать, но, поскольку я совсем новичок, я не знаю, будет ли это хорошей практикой. Добавляю в свой конфиг:
server {
listen 8089;
listen [::]:8089;
server_name my_public_ip or my public_dns => x.x.x.x;
location / {
return 403;
}
error_page 403 /403.html;
error_page 501 =500 /50x.html;
error_page 500 502 503 504 /50x.html;
location /403.html {
root /usr/share/nginx/html;
# allow all;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
И поэтому я могу обращаться с этим, как я хочу.
Попробуйте добавить это
if ($host !~* ^(www.example.com)) {
return 444;
}
Это даст 444 в качестве ответа на все запросы без вашего доменного имени.
Правильный способ решить эту проблему в «мире AWS» — использовать балансировщик нагрузки приложений с правилами прослушивателя перед вашим экземпляром EC2 и поместить ваш фактический сервер в группу автоматического масштабирования.
Это дает массу других преимуществ:
Обратите внимание, что для того, чтобы доменное имя вершины работало, было бы лучше перенести фактический домен на AWS Route53 или, по крайней мере, делегировать управление AWS.
Спасибо за ответ. Я добавил часть моей конфигурации nginx и возможное решение, о котором я подумал, прежде чем спрашивать.