====== Сервер по-умолчанию в nginx ======
Чтобы избежать открытия рандомного сайта по IP адресу и обрабатывать все неизвестные запросы нам нужно создать виртуальный хост "по-умолчанию".
Создаём новый файл ''default_server.conf'' в директории ''/etc/nginx/conf.d''
Не забываем про include в секции http
http {
include /etc/nginx/conf.d/*.conf;
}
Сервер по-умолчанию на 80 порту
server {
listen 1.2.3.4:80 default_server;
listen [::]:80 default_server;
server_name _;
server_name_in_redirect off;
log_not_found off;
return 410;
}
Для HTTPS немного сложнее. (см. [[https://nginx.org/ru/docs/http/request_processing.html|Как nginx обрабатывает запросы]])
Здесь нам поможет [[https://en.wikipedia.org/wiki/Snake_oil|змеиное масло]] :) Создаём self-signed сертификат для default_server.
{{:linux:nginx:ssl_self_signed.jpg?nolink|}}
openssl req -newkey rsa:2048 -nodes -keyout snakeoil_key.pem -x509 -days 3650 -out snakeoil_crt.pem
Сервер по-умолчанию на 443 порту
server {
listen 1.2.3.4:443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
ssl_certificate /etc/nginx/ssl/snakeoil_crt.pem;
ssl_certificate_key /etc/nginx/ssl/snakeoil_key.pem;
server_name_in_redirect off;
log_not_found off;
return 410; # в большинстве howto используется 444
}
Вместо ''return 444'' можно использовать ''return 410''. Код **410 Gone** сообщит ботам и поисковым системам, что URL можно удалить и никогда не индексировать его.
{{:linux:nginx:nginx_default_server_410.png?nolink&600|}}
Проверим через curl
**return 410**
# curl -D -k -s -v http://1.2.3.4
* About to connect() to 1.2.3.4 port 80 (#0)
* Trying 1.2.3.4...
* Connected to 1.2.3.4 (1.2.3.4) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 1.2.3.4
> Accept: */*
>
< HTTP/1.1 410 Gone
< Server: nginx/1.16.1
< Date: Sat, 18 Apr 2020 16:31:34 GMT
< Content-Type: text/html
< Content-Length: 143
< Connection: keep-alive
<
410 Gone
410 Gone
nginx/1.16.1
* Connection #0 to host 1.2.3.4 left intact
# curl -D -k -s -v https://1.2.3.4
* About to connect() to 1.2.3.4 port 443 (#0)
* Trying 1.2.3.4...
* Connected to 1.2.3.4 (1.2.3.4) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Server certificate:
* subject: CN=RTFM,OU=RTFM,O=RTFM,L=RTFM,ST=RTFM,C=UK
* start date: Apr 17 16:36:35 2020 GMT
* expire date: Apr 15 16:36:35 2030 GMT
* common name: RTFM
* issuer: CN=RTFM,OU=RTFM,O=RTFM,L=RTFM,ST=RTFM,C=UK
* NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)
* Peer's certificate issuer has been marked as not trusted by the user.
* Closing connection 0
**return 444**
# curl -D -k -s -v http://1.2.3.4
* About to connect() to 1.2.3.4 port 80 (#0)
* Trying 1.2.3.4...
* Connected to 1.2.3.4 (1.2.3.4) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 1.2.3.4
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 1.2.3.4 left intact
# curl -D -k -s -v https://1.2.3.4
* About to connect() to 1.2.3.4 port 443 (#0)
* Trying 1.2.3.4...
* Connected to 1.2.3.4 (1.2.3.4) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Server certificate:
* subject: CN=RTFM,OU=RTFM,O=RTFM,L=RTFM,ST=RTFM,C=UK
* start date: Apr 17 16:36:35 2020 GMT
* expire date: Apr 15 16:36:35 2030 GMT
* common name: RTFM
* issuer: CN=RTFM,OU=RTFM,O=RTFM,L=RTFM,ST=RTFM,C=UK
* NSS error -8172 (SEC_ERROR_UNTRUSTED_ISSUER)
* Peer's certificate issuer has been marked as not trusted by the user.
* Closing connection 0
{{tag>nginx default_server "return 444"}}