当我击中时kevinsuttle.com
,我得到
"No data received ERR_EMPTY_RESPONSE".
当我点击时https://kevinsuttle.com
,我得到了网站。
幽灵0.7.5
nginx 1.4 => 1.9.9
letsencrypt 0.2.0
Digital Ocean:Ubuntu 14.04 Ghost 1单击滴
在“网络连接>域”下,我同时拥有kevinsuttle.com
和www.kevinsuttle.com
作为A
指向服务器IP地址(@
)的记录。
DNSimple记录
| 类型 姓名| TTL | 内容| | ------ | --------------------- | --------------- | ---- -------------------- | | 网址| www.kevinsuttle.com | 3600(1小时)| http://kevinsuttle.com |
Ghost的config.js中唯一修改的部分是我的域。
url: 'http://kevinsuttle.com',
默认情况下,nginx 1.9不会创建以下目录:
/ etc / nginx / sites-available
/ etc / nginx / sites-enabled
而且通常的default
conf不在这两个目录中创建。
相反,有一个etc/nginx/conf.d/default.conf
和重要的etc/nginx/conf.d/nginx.conf
。您会看到很多教程告诉您删除default.conf,这似乎很好,但是无论您做什么,都不要删除nginx.conf
。
另外,您应该将目录移动/创建ghost.conf
到/etc/nginx/conf.d/
目录中。这就是固定我的问题之一,因为在最后一行etc/nginx/conf.d/nginx.conf
看在/conf.d/
目录中包含的文件有:include /etc/nginx/conf.d/*.conf;
这是我的/etc/nginx/conf.d/ghost.conf
文件:
server {
root /usr/share/nginx/html;
index index.html index.htm;
listen 443 ssl http2;
server_name kevinsuttle.com www.kevinsuttle.com;
ssl_certificate /etc/letsencrypt/live/kevinsuttle.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kevinsuttle.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location ~ /.well-known {
allow all;
root /var/www/;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
root /var/www/;
}
location /.well-known/ {
root /var/www/;
}
}
server {
listen 80 ssl http2;
server_name kevinsuttle.com;
return 301 https://$host$request_uri;
}
现在,我一切正常,并尝试将nginx升级到1.9+,以便通过http / 2提供服务。DigitalOcean的一键式Ghost小滴默认使用nginx 1.4。
长话短说,我一直得到这个错误:
dpkg: error processing archive /var/cache/apt/archives/nginx_1.9.9-1~trusty_amd64.deb (--unpack):
我发现的唯一解决方案是
apt-get purge nginx nginx-common
然后,通过将以下行添加到我的/etc/apt/source.list文件中,我能够安装nginx 1.9 。
deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx
现在,我简单地添加了listen 80 ssl http2;
和listen 443 ssl http2;
,并且http / 2正常运行。但仅在https://
显式输入URL时。
我发现了一些证据表明express
不支持这一事实http/2
,但是我对此并不是100%的。
任何想法将不胜感激。
我认为这与Ghost或DNS无关。
您可以排除DNS,因为www和not-www都解析为配置的IP。
➜ ~ dig kevinsuttle.com +short
162.243.4.120
➜ ~ dig www.kevinsuttle.com +short
162.243.4.120
DNS协议的工作级别比HTTP低,并且它并不关心HTTP版本或是否使用HTTP还是HTTPS。因此,我们可以排除DNS,然后检查更高级别的协议。
我还排除了Ghost / Express的问题,因为使用HTTPS时我可以向您的博客发送HTTP / 2请求。
➜ ~ curl --http2 -I https://kevinsuttle.com/
HTTP/2.0 200
server:nginx/1.9.9
date:Sun, 24 Jan 2016 19:34:30 GMT
content-type:text/html; charset=utf-8
content-length:13594
x-powered-by:Express
cache-control:public, max-age=0
etag:W/"351a-fflrj9kHHJyvRRSahEc8JQ"
vary:Accept-Encoding
只要我使用站点的HTTP版本,我还可以回退到HTTP 1.1。
➜ ~ curl -I https://kevinsuttle.com/
HTTP/1.1 200 OK
Server: nginx/1.9.9
Date: Sun, 24 Jan 2016 19:35:36 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 13594
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"351a-fflrj9kHHJyvRRSahEc8JQ"
Vary: Accept-Encoding
因此,问题在于Nginx配置。具体来说,问题在于仅HTTP块的Nginx配置。
我目前无法尝试,但我个人认为问题在于以下内容:
listen 80 ssl http2;
它应该是
listen 80;
该ssl
指令用于强制侦听套接字理解ssl
。但是,在您的情况下,让套接字监听80以使用HTTPS没有意义。而且,使用的套接字ssl
必须声明一个关联的SSL配置(也就是至少一个有效的证书和密钥)。
通常,您用于ssl
配置处理HTTP和HTTPS请求的单个服务器:
server {
listen 80;
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
...
}
另请注意,如Nginx文档中所述
因此不建议在现代版本中使用ssl指令。
采用http2
结合非HTTPS插座也可以是一个麻烦的原因。
引用本文:
虽然该规范不会强迫任何人通过TLS实现HTTP / 2,但允许您通过明文TCP来实现HTTP / 2,但Firefox和Chrome开发团队的代表都表达了仅通过TLS实现HTTP / 2的意图。这意味着HTTPS:// URL是唯一将为这些浏览器启用HTTP / 2的URL。
因此,假设有可能,通过HTTP / 2服务非https站点可能没有用。实际上,鉴于这张票中描述的问题似乎与您的问题相吻合,我怀疑今天是否有可能。
总而言之,只需更改
server {
listen 80 ssl http2;
server_name kevinsuttle.com;
return 301 https://$host$request_uri;
}
到
server {
listen 80;
server_name kevinsuttle.com;
return 301 https://$host$request_uri;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句