Eu tenho um servidor de desenvolvimento NGINX. Eu tenho um grande número de diretivas de configuração que direcionam vários recursos do servidor.
Eu quero poder acessar o servidor via SSL. O problema é que eu posso acessar o servidor de diferentes nomes de domínio. Por exemplo, dentro da minha LAN eu poderia usar 192.168.1.100, mas na Internet (através do encaminhamento de NAT) eu usaria o nome de domínio da minha casa, ou em algumas instâncias específicas o endereço IP externo do servidor.
Como o SSL depende do nome do host que o cliente solicitou, desejo gerar e fornecer vários certificados SSL com base em como o servidor está sendo acessado. Por exemplo, o CN de um certificado seria " link ", enquanto outro seria " link "e outro ainda pode ser" link ".
Acho que é possível conseguir isso duplicando blocos de servidores como este:
server {
listen 443 ssl;
server_name 192.168.1.10;
ssl_certificate /etc/nginx/192.168.1.10.crt;
ssl_certificate_key /etc/nginx/192.168.1.10.pem;
location / {
root /var/www/root;
index index.html index.htm;
}
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/www.example.com.crt;
ssl_certificate_key /etc/nginx/www.example.com.pem;
location / {
root /var/www/root;
index index.html index.htm;
}
}
...
O problema é que tenho vários (ou seja, mais de 10)% blocoslocation
dentro da configuração do meu servidor porque estou testando várias configurações, ambientes e aplicativos da Web no mesmo servidor. A maioria desses locais inclui uma passagem FastCGI e / ou uma diretiva alias
ou rewrite
.
A duplicação de todos os blocos location
não é apenas tediosa, mas pode levar a inconsistências se eu esquecer de atualizar cada uma delas.
Além disso, também planejei possivelmente usar esse ambiente no futuro, de forma a usar subdomínios, cada um com blocos de localização diferentes. Então agora acabamos com algo assim:
- www.example.com usa o conjunto de parâmetros
location
1
- 12.34.56.78 usa o conjunto de parâmetros
location
1
- test.example.com usa o conjunto de parâmetros
location
2
- 192.168.1.100 usa o conjunto de parâmetros
location
2
Desde que eu não use SSL, isso não é um problema, já que o servidor sempre será servido do bloco de servidores "padrão". Mas o SSL parece exigir um bloco server
separado para cada nome de domínio para servir os certificados exclusivos ...
Idealmente, o que eu gostaria é de algum tipo de "agrupamento / inclusão nomeada" onde eu pudesse escrever todos os location
blocos em uma seção separada e então incluí-los dentro de server
blocos. Minha solução "ideal" se existisse:
config config1 {
location / {
root /var/www/root;
index index.html index.htm;
}
location /testapp1 {
include fastcgi_params;
fastcgi_split_path_info ^(/testapp1)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/testapp1.sock;
}
}
config config2 {
location / {
root /var/www/root2;
index index.html index.htm;
}
location /testapp2 {
include fastcgi_params;
fastcgi_split_path_info ^(/testapp2)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/testapp2.sock;
}
}
server {
listen 443 ssl;
server_name 192.168.1.100;
ssl_certificate /etc/nginx/192.168.1.10.crt;
ssl_certificate_key /etc/nginx/192.168.1.10.pem;
include config config1;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/www.example.com.crt;
ssl_certificate_key /etc/nginx/www.example.com.pem;
include config config1;
}
server {
listen 443 ssl;
server_name test.example.com;
ssl_certificate /etc/nginx/test.example.com.crt;
ssl_certificate_key /etc/nginx/test.example.com.pem;
include config config2;
}
...