簡體   English   中英

PHP內置服務器+ SSL

[英]PHP builtin server + SSL

我知道PHP內置服務器不支持SSL。 無論如何它是否可以實現?

我嘗試使用Nginx代理和proxy_pass所有HTTPS請求到http://127.0.0.1:8080但是當我從http://127.0.0.1:8080重定向到https://127.0.0.1:8080它會導致重定向循環。

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;
    }
}

你是如何解決這個問題的?

關於你的nginx嘗試以下方法:

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;
  }
}

我在本地服務器上使用上面的配置,所以它應該工作。 話雖如此,您需要確保禁用SELinux ,並且FirewallD允許端口8080.默認情況下,兩者都將在默認的Linux風格安裝上啟用,因此您必須進行更改。

您可以在任何位置放置SSL證書,然后指向它們。

如果您嘗試從外部網絡訪問,則需要在路由器上允許端口8080。

如果您需要SELinuxFirewallD幫助,請告訴我。 我會告訴你代碼。 如果這是本地測試環境,那么只需禁用它們,直到nginx正確運行。

我認為問題的一部分就是你使用代理傳遞的方式。

據我所知,你只是在端口443上監聽,所以我甚至認為它不會接受端口80連接以便代理傳遞發生。

其次,我從未見過用於將http重定向到https的代理傳遞,但我也不是100%經驗豐富的nginx或apache,但我通常會使用代理傳遞進行反向代理,我們請求子域和其他目錄到各種IP。

這個帖子有幫助嗎? 答案中有一個配置:

nginx force ssl http

讓我知道你發現了什么,我可能有時間稍后測試一下,但如果你只是在端口443上監聽並且設置為只接受ssl,那么http請求就會失敗,說服務器無法訪問。

如果你確實希望讓他們能夠點擊http,但是被強制轉換為SSL連接,我不知道代理傳遞是否是正確的方法。

編輯:

https://serverfault.com/questions/67316/in-nginx-how-can-i-rewrite-all-http-requests-to-https-while-maintaining-sub-dom

這看起來很正確

代理對您沒什么幫助,因為Symfony不知道協議,仍然嘗試重定向到https。

試試這個配置

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM