[Nginx] Comment rediriger vers des sous-domaines?
Bonjour,
J'ai un serveur dont les DNS sont :
Code:
1 2 3 4
| @ 10800 IN A 11.22.33.44
cloud 10800 IN A 11.22.33.44
blog 10800 IN A 11.22.33.44
www 10800 IN CNAME exemple.com. |
Sur le serveur 11.22.33.44 (Ubuntu 14.04), j'ai nginx :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| upstream php-handler {
server 127.0.0.1:9000;
#server unix:/var/run/php5-fpm.sock;
}
# redirection ssl
server {
listen 80;
server_name blog.exemple.com;
return 301 https://$server_name$request_uri;
}
server {
listen 80;
server_name exemple.com www.exemple.com;
return 301 https://$server_name$request_uri;
}
#---------------------------#
# Exemple.com
#---------------------------#
server {
listen 443 ssl;
server_name exemple.com www.exemple.com;
index index.html index.htm;
charset utf-8;
error_page 401 403 404 /404.html;
## SSL settings
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_trusted_certificate /etc/letsencrypt/live/exemple.com/chain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ecdh_curve secp384r1;
location / {
proxy_pass http://192.168.0.11/;
}
}
# blog
server {
listen 443 ssl;
server_name blog.exemple.com;
index index.html index.htm;
charset utf-8;
error_page 401 403 404 /404.html;
## SSL settings
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_trusted_certificate /etc/letsencrypt/live/exemple.com/chain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_ecdh_curve secp384r1;
location / {
proxy_pass http://192.168.0.11;
}
} |
Sur le serveur, j'ai installé une machine virtuelle 192.168.0.11 avec nginx configurer comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| server{
listen 80;
server_name exemple.com www.exemple.com;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
#
# blog
#
server{
listen 80;
server_name blog.exemple.com;
root /usr/share/nginx/html/blog;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
} |
Le soucis que je rencontre :
- exemple.com et www.exemple.com sont bien rediriger en https
- blog.exemple.com apparaît bien rediriger en https dans la barre d'adresse, mais c'est la page d'index de exemple.com qui s'affiche!!
Une âme charitable pourrait-elle m'expliquer ?
Merci,
Christophe
Edit : Une solution (peut-être pas la seule ni la meilleure)
Tout d'abord création du fichier /etc/nginx/conf.d/proxy.conf
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k; |
Ensuite j'ai déplacé le blog de /usr/share/nginx/html vers /var/www/blog avec modification du proxy_pass.
Test : un beau 403...
Modification des droits
Code:
1 2
| chown www-data:www-data /var/www
chmod 744 /var/www |
Ça marche!
À force d'échouer, on finit par réussir.
Moralité, plus on échoue, plus on a de chance de réussir