6
votes

PHP Server intégré + SSL

Je sais que le serveur intégré PHP ne prend pas en charge SSL. Est-ce réalisable quand même?

J'ai essayé d'utiliser Nginx Proxy et proxy_Pass toutes les demandes HTTPS à http://127.0.0.0.1:8080 Mais lorsque j'ai une redirection de http: // 127.0.0.1:8080 à https://127.0.0.1:8080 Il provoque une boucle de redirection. xxx

Comment résoudre ce problème?

php

12 commentaires

Cela devrait certainement être possible, car la partie PHP ne fait aucun SSL du tout. Où est le https://127.0.0.1:8080 Redirection venant de, cependant?


@HALFER Une application basée sur un symfony forçage de HTTPS pour certaines URL. Donc, la demande proxy_pass est redirigée vers HTTPS, qui est redirigée vers 127.0.0.1:8080 et ainsi de suite.


Droite, donc creuser dans l'application et réécrire manuellement l'adresse localeHost à la propriété intellectuelle / domaine de l'application sur le côté proxy. Je n'ai pas utilisé Symfony2, mais il doit y avoir un moyen de faire cela. Ajoutez-vous le code à votre question qui fait cela?


@HALFER L'IP reste la même - j'hôte les choses sur le localhost. À propos du code de collage ... Je pense que c'est tout à fait impossible - beaucoup de code à coller :)


Juste, je pense que je ne suis pas avec toi. Est-ce que Symfony redirige vers http: // localhost ou https: // localhost ? Si c'est ce dernier, il doit être servi par le proxy Nginx, et s'il s'agit de l'ancien (pas de SSL), alors symfony doit simplement être configuré pour échanger http: avec https: et échangez le port 8080 à 443 (ou supprimez-le) lorsqu'il s'agit d'une redirection complète qualifiée.


(Oui, vous ne pouvez pas coller toute l'application ici, mais j'imagine qu'il existe un endroit central, vous configurez le domaine racine de l'application, soit à un niveau de cadre ou d'application?)


(Misté: il peut être intéressant de configurer cela sur votre machine locale afin que, à partir de votre navigateur, la destination proxy ( http://127.0.0.0.1:8080 ) ne peut pas être vu depuis votre navigateur. Vous voulez Pour vous assurer qu'il n'y ait pas de redirections effrontées en impliquant cela que cela s'appuie sur - ils ne le seront pas (ou ne devraient pas être) disponibles dans un environnement direct.)


@halfer dans SF World Vous ne configurez pas le nom de domaine, il est pris à partir de la configuration du serveur. La destination proxy est visible dans mon navigateur - je développe sur mon localhost, j'ai mon navigateur installé sur.


"Il est pris à partir de la configuration du serveur" - vous pourriez donc avoir à remplacer cela alors, au niveau de l'application.


Si votre application est exécutée http , il ne faut pas se préoccuper de la redirection d'une demande à HTTPS. Donc, vous émettez, c'est avec l'application plutôt que Nginx Config. Vérifiez pourquoi l'application fait cela


La question est de savoir pourquoi sur Terre souhaitez-vous utiliser le serveur intégré PHP pour la production? Il est un seul fileté et présente des performances terribles + ce n'est pas durci pour la production.


N'oubliez pas d'utiliser l'option «Exporter CertData»: proxy_set_header X-SSL-CERT $ SSL_CLIENT_CERT. Seulement de cette manière est un certificat disponible pour l'application client pour la lecture, etc.


3 Réponses :


1
votes

Une partie du problème est la façon dont vous utilisez Pass Proxy, je pense.

Autant que je puisse dire que vous n'écoutez que sur le port 443, je ne pense même pas que cela accepterait une connexion de port 80 pour que la passe de proxy se produise.

Deuxièmement, je n'ai jamais vu Pass de proxy utilisé pour rediriger HTTP à HTTPS, mais je ne suis pas également assaisonné à 100% à Nginx ou Apache, mais j'utiliserais généralement une passe de proxy pour la proxyation inverse, nous demandons des sous-domaines et d'autres répertoires à divers. Ips.

Cette post a-t-elle de l'aide? La réponse a une configuration dedans:

NGinx Force SSL HTTP

Permettez-moi de savoir ce que vous découvrirez, je pourrais avoir le temps de tester cela un peu plus tard, mais si vous n'écoutez que sur le port 443 et que vous avez défini uniquement pour accepter SSL, une demande HTTP n'échouait tout simplement pas le serveur pas accessible.

Si vous voulez réellement les avoir capables de frapper HTTP, mais pour être forcé à une connexion SSL, je ne sais pas si le passage de proxy est la bonne façon de le faire.

EDIT:

https://serverfault.com/questions/67316/in-nginx-how-can--i-rewrite-all-http-request-a-https-que-Maintening-Dom

Ceci semble correct


1 commentaires

Passe proxy, imo est plus à dire, vous avez votre domaine principal à, domain.com. Vous pouvez utiliser une passe proxy pour demander une demande de sous-domaine.Domain.com et livrez-la à une adresse IP différente ou d'un répertoire Web spécifique sur le serveur, etc.



1
votes

Proxy ne vous aide pas beaucoup, car Symfony ne connaît pas de protocole et essaie toujours de rediriger vers https.

Essayez cette configuration p>

server {


    listen       443 ssl;
    server_name  127.0.0.1;

    ssl_certificate     /etc/nginx/cert.crt;
    ssl_certificate_key /etc/nginx/cert.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass          http://127.0.0.1:8080;
        proxy_redirect      http://localhost:8080 https://127.0.0.1;

        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
    }
}


0 commentaires

2
votes

Concernez votre NGinx CODE> Essayez ce qui suit:

upstream local8080 {
  server 127.0.0.1:8080;
}
## HTTP CONFIG
server {
  listen 80;
  server_name 127.0.0.1;
  return 301 https://$host$request_uri;
}

## SSL SERVER
server {
  listen 443 ssl http2;
  server_name 127.0.0.1;
  # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
  ssl_dhparam /etc/nginx/ssl/dhparam.pem;

  # modern configuration. tweak to your needs.
  ssl_protocols TLSv1.2 TLSv1.1;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
  ssl_prefer_server_ciphers on;

  # OCSP Stapling ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  ssl_stapling on;
  ssl_stapling_verify on;

  resolver 127.0.0.1;

  ssl_certificate /etc/nginx/ssl/localhost.crt;
  ssl_certificate_key /etc/nginx/ssl/private/localhost.key;

location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass https://local8080;
      root /usr/share/nginx/html;
  }
}


1 commentaires

Non, vous faites référence à l'amont et non à l'URI actuel. Notez la première ligne où vous voyez en amont local8080 . L'amont peut être n'importe quel nom que vous voulez. Appelez-le localProxy ou le nom du serveur proxy localDev0 . Puis référez-le avec le nom en amont.