server_name site1.com;
set_real_ip_from 0.0.0.0/0;
set_real_ip_from ::/0;
real_ip_header CF-Connecting-IP;
listen 443 ssl;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:DES-CBC3-SHA:!DES:!RC4:!aNULL:!eNULL:!LOW:!MD5:!EXP:!PSK:!SRP:!DSS:!CAMELLIA:!SEED;
ssl_session_cache shared:SSL:10m;
ssl_certificate /etc/nginx/ssl/site.pem;
ssl_certificate_key /etc/nginx/ssl/site.key;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
##########################################
access_log /var/log/nginx/access-site.log;
error_log /var/log/nginx/error-site.log;
root /home/site/site;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
пытаюсь добавить второй сайт cat /etc/nginx/conf.d/site2.conf
server {
server_name site2.com;
listen 80; (работает)
listen 443 ssl; (не работает)
ssl_certificate /etc/nginx/ssl/site2/cert.pem;
ssl_certificate_key /etc/nginx/ssl/site2/key.pem;
access_log /var/log/nginx/access-site.log;
error_log /var/log/nginx/error-site.log;
root /home/site/site2;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
проблема в том, что второй сайт по какой то причине не работает с listen 443 ssl; а с listen 80; - работает
подскажите, что я делаю не так?
В чем заключается "не работает"?
проблема была в том что CF ходил по 80 порту, подкрутил CF и все заработало)
set_real_ip_from 0.0.0.0/0; set_real_ip_from ::/0; real_ip_header CF-Connecting-IP; В таком случае - любой желающий может подменить на сервере значение реального IP клиента, что есть не очень хорошо. Гораздо лучше будет разрешить nginx обрабатывать заголовок CF-Connecting-IP только в том случае, если запрос на сервер действительно пришел из подсети, принадлежащей Cloudflare. Актуальный список всех подсетей Cloudflare можно найти здесь: https://www.cloudflare.com/ips/ Чтобы не поддерживать список подсетей Cloudflare в конфиге nginx в актуальном состоянии вручную - можно этот процесс автоматизировать, например, через cron, с помощью моей утилиты https://github.com/makhomed/nginx-cloudflare или любой другой аналогичной утилиты - на GitHub их можно найти достаточно большое количество -GitHub выдает в результатах поиска 87 репозиториев по запросу cloudflare real ip Кроме того, так как все настройки для Cloudflare одинаковые для всех сайтов - их можно один раз прописать в контексте http и они будут наследоваться внутрь каждого блока server {} автоматически. При этом - если запрос на сервер действительно пришел из подсети, которая принадлежит Cloudflare - тогда реальный IP клиента берется из заголовка запроса CF-Connecting-IP, если же запрос пришел не из сети Cloudflare - тогда этот заголовок игнорируется. Поэтому вполне безопасно включать эту настройку для всех сайтов на сервере, вне зависимости от того, ходят на эти сайты клиенты напрямую, или через Cloudflare. И для того, чтобы на какой-то сайт можно было бы ходить только через Cloudflare и нельзя было ходить напрямую - можно в блоке server {} для этого конкретного сайта прописать такую настройку: if ($not_cloudflare) { return 444; } - получаем еще больший уровень защиты сайта от DDoS-атак ценой невозможности выключить проксирование через Cloudflare без правки конфига nginx для этого конкретного сайта.
Ого спасибо большое!
Обсуждают сегодня