Есть ли способ поделиться директивами конфигурации между двумя nginx server {}
блоки? Я бы хотел избежать дублирования правил, поскольку HTTPS- и HTTP-контент моего сайта обслуживается с одинаковой конфигурацией.
Сейчас это так:
server {
listen 80;
...
}
server {
listen 443;
ssl on; # etc.
...
}
Могу ли я сделать что-то вроде:
server {
listen 80, 443;
...
if(port == 443) {
ssl on; #etc
}
}
Вы можете объединить это в один серверный блок следующим образом:
server {
listen 80;
listen 443 default_server ssl;
# other directives
}
Чтобы уточнить принятый ответ, нужно опустить
SSL on;
и вам просто понадобится следующее для версии nginx после 0.8.21
listen 443 ssl;
Ссылка:
Я не знаю способа, как вы предлагаете, но, безусловно, есть простой и поддерживаемый способ.
Переместите общие настройки сервера в отдельный файл, например "serverFoo.conf", а затем include
это в отдельном server {}
блоки вроде так:
server {
listen 80;
include serverFoo.conf;
}
server {
listen 443 ssl;
include serverFoo.conf;
}
Расширяя уже полезные ответы, вот более полный пример:
server {
# Listen on port 80 and 443
# on both IPv4 and IPv6
listen 80;
listen [::]:80 ipv6only=on;
listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
# Set website folder
root /path/to/your/website;
# Enable SSL
ssl_certificate your-cert.pem;
ssl_certificate_key your-cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
}
Просто добавлю к сообщению Игоря / Джодера, если вы слушаете определенный IP-адрес, вы можете использовать:
listen xxx.xxx.xxx.xxx;
listen xxx.xxx.xxx.xxx:443 default ssl;