[英]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。
如果您需要SELinux
或FirewallD
幫助,請告訴我。 我會告訴你代碼。 如果這是本地測試環境,那么只需禁用它們,直到nginx
正確運行。
我認為問題的一部分就是你使用代理傳遞的方式。
據我所知,你只是在端口443上監聽,所以我甚至認為它不會接受端口80連接以便代理傳遞發生。
其次,我從未見過用於將http重定向到https的代理傳遞,但我也不是100%經驗豐富的nginx或apache,但我通常會使用代理傳遞進行反向代理,我們請求子域和其他目錄到各種IP。
這個帖子有幫助嗎? 答案中有一個配置:
讓我知道你發現了什么,我可能有時間稍后測試一下,但如果你只是在端口443上監聽並且設置為只接受ssl,那么http請求就會失敗,說服務器無法訪問。
如果你確實希望讓他們能夠點擊http,但是被強制轉換為SSL連接,我不知道代理傳遞是否是正確的方法。
編輯:
這看起來很正確
代理對您沒什么幫助,因為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.