J'exécute une application Sinatra derrière passager / nginx. J'essaie de le faire répondre aux appels http et https. Le problème est que lorsque les deux sont définis dans le bloc serveur, les appels https reçoivent normalement une réponse, mais http génère une erreur 400 "La requête HTTP simple a été envoyée au port HTTPS". Ceci est pour une page statique, donc je suppose que Sinatra n'a rien à voir avec cela. Des idées pour résoudre le problème?
Voici le bloc serveur:
server {
listen 80;
listen 443 ssl;
server_name localhost;
root /home/myhome/app/public;
passenger_enabled on;
ssl on;
ssl_certificate /opt/nginx/ssl_keys/ssl.crt;
ssl_certificate_key /opt/nginx/ssl_keys/ssl.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
location /static {
root /home/myhome/app/public;
index index.html index.htm index.php;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 /500.html;
access_log /home/myhome/app/logs/access.log;
error_log /home/myhome/app/logs/error.log;
}
my.example.com:443
ne fonctionnait pas. Changer cela au lieu de cela ahttps://my.example.com
fonctionné. Bizarre, je n'ai jamais eu ce problème avec Apache.ssl on;
dit à NGINX de serveur TOUT contenu via SSL. Utilisez l'indicateur "ssl" à la fin de votrelisten 443;
exemplelisten 443 ssl;
si votre serveur délivre à la fois le trafic http et https, et supprimez lassl on;
directive.Réponses:
J'ai rencontré un problème similaire. Cela fonctionne sur un serveur et pas sur un autre serveur avec la même configuration Nginx. J'ai trouvé la solution à laquelle Igor a répondu ici http://forum.nginx.org/read.php?2,1612,1627#msg-1627
Oui. Ou vous pouvez combiner des serveurs SSL / non SSL dans un seul serveur:
la source
ssl off;
ssl on;
(pas besoin d'ajouter ssl off). De plus, comme je ne me souviens plus de la version de Nginx, il n'est plus nécessaire de l'utiliserdefault
enlisten 443
ligne. La configuration OP était donc correcte, il suffit de la supprimerssl on
et cela devrait fonctionner.ssl on
. @ La réponse de MichaelJ.Evans ci-dessous est une bien meilleure solution.Les réponses ci-dessus sont incorrectes dans la mesure où la plupart écrasent le test «est cette connexion HTTPS» pour permettre de servir les pages via http indépendamment de la sécurité de la connexion.
La réponse sécurisée utilisant une page d'erreur sur un code d'erreur http 4xx spécifique à NGINX pour rediriger le client pour qu'il réessaye la même requête vers https. (comme indiqué ici /server/338700/redirect-http-mydomain-com12345-to-https-mydomain-com12345-in-nginx )
Le PO doit utiliser:
la source
nginx['custom_gitlab_server_config'] = "error_page 497 https://$host:$server_port$request_uri;"
fait l'affaireL'erreur dit tout en fait. Votre configuration indique à Nginx d'écouter sur le port 80 (HTTP) et d'utiliser SSL. Lorsque vous pointez votre navigateur vers
http://localhost
, il essaie de se connecter via HTTP. Puisque Nginx attend SSL, il se plaint de l'erreur.La solution de contournement est très simple. Vous avez besoin de deux
server
sections:la source
J'ai eu exactement le même problème, j'ai un peu la même configuration que votre exemple et je l'ai fait fonctionner en supprimant la ligne:
ssl on;
Pour citer la doc:
la source
Selon l' article de Wikipédia sur les codes d'état . Nginx a un code d'erreur personnalisé lorsque le trafic http est envoyé au port https (code d'erreur 497)
Et selon les documents nginx sur error_page , vous pouvez définir un URI qui sera affiché pour une erreur spécifique.
Ainsi, nous pouvons créer un uri auquel les clients seront envoyés lorsque le code d'erreur 497 est déclenché.
nginx.conf
Cependant, si un client fait une demande via une autre méthode à l'exception d'un GET, cette demande sera transformée en GET. Ainsi, pour conserver la méthode de requête par laquelle le client est entré; nous utilisons des redirections de traitement d'erreur comme indiqué dans la documentation nginx sur error_page
Et c'est pourquoi nous utilisons la
301 =307
redirection.En utilisant le fichier nginx.conf montré ici, nous pouvons avoir http et https écouter sur le même port
la source
Voici un exemple pour configurer HTTP et HTTPS dans le même bloc de configuration avec le support d' ipv6 . La configuration est testée dans Ubuntu Server et NGINX / 1.4.6 mais cela devrait fonctionner avec tous les serveurs.
N'incluez pas
ssl on
ce qui peut provoquer une400
erreur. La configuration ci-dessus devrait fonctionner pourJ'espère que cela t'aides!
la source
si vous utilisez phpmyadmin, ajoutez: fastcgi_param HTTPS activé;
la source
En fait, vous pouvez le faire avec:
Cela a résolu mon problème d'utilisation de nginxvhosts; maintenant, je peux utiliser SSL et HTTP ordinaire. Fonctionne même avec des ports combinés.
la source