- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我点击 kevinsuttle.com
时,我得到了
"No data received ERR_EMPTY_RESPONSE".
当我点击 https://kevinsuttle.com
时,我得到了网站。
Ghost 0.7.5
nginx 1.4 => 1.9.9
letsencrypt 0.2.0
digital ocean :Ubuntu 14.04 Ghost 1-click droplet
在 Networking > Domains 下,我将 kevinsuttle.com
和 www.kevinsuttle.com
作为 A
指向服务器 IP 地址的记录 (@
)。
DNS简单记录
| Type | Name | TTL | Content ||------ |--------------------- |--------------- |------------------------ || URL | www.kevinsuttle.com | 3600 (1 hour) | http://kevinsuttle.com |
The only modified portion in Ghost's config.js is my domain.
url: 'http://kevinsuttle.com',
nginx 1.9 默认不创建以下目录:
/etc/nginx/可用站点
/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 droplet 默认使用 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 时。
我找到了 some evidence这表明 express
不支持 http/2
,但我不是 100% 支持这一点。
任何想法将不胜感激。
最佳答案
我认为这不是 Ghost 或 DNS 的问题。
您可以排除 DNS,因为 www 和非 www 都解析为配置的 IP。
➜ ~ dig kevinsuttle.com +short
162.243.4.120
➜ ~ dig www.kevinsuttle.com +short
162.243.4.120
DNS 协议(protocol)工作在比 HTTP 更低的级别,它不关心 HTTP 版本或您使用的是 HTTP 还是 HTTPS。因此,我们可以排除 DNS 并转移到检查更高级别的协议(protocol)。
我也排除了 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-only block 的 Nginx 配置。
我现在无法尝试,但我个人认为问题出在这一行:
listen 80 ssl http2;
应该是
listen 80;
ssl
指令用于强制监听套接字理解ssl
。但是,在您的情况下,让套接字监听 80 以使用 HTTPS 是没有意义的。此外,使用 ssl
的套接字必须声明关联的 SSL 配置(也就是至少一个有效的证书和 key )。
通常,您使用 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;
...
}
另请注意,作为 explained in the Nginx documentation
The use of the ssl directive in modern versions is thus discouraged.
将 http2
与非 https 套接字结合使用也可能导致麻烦。
引用 this article :
While the spec doesn’t force anyone to implement HTTP/2 over TLS but allows you to do it over clear text TCP, representatives from both the Firefox and the Chrome development teams have expressed their intents to only implement HTTP/2 over TLS. This means HTTPS:// URLs are the only ones that will enable HTTP/2 for these browsers.
因此,假设有可能,通过 HTTP/2 为非 https 站点提供服务可能没有用。实际上,考虑到 issue described in this ticket,我怀疑它在今天是否可能。这似乎符合您的问题。
总结一下,简单的改
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;
}
关于nginx - ERR_EMPTY_RESPONSE 与 Ghost 0.7.5、Nginx 1.9、HTTPS 和 HTTP/2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34971886/
我有一个无所事事的盒子,已经运行了一段时间,今天,由于某种原因,当我尝试重新启动nginx时,得到了以下提示。 nginx: [emerg] host not found in upstream "w
我注意到,当我使用 ubuntu 命令“nginx”启动 nginx 并执行 systemctl status nginx 时。它表明 systemctl 已禁用。此外,如果我首先使用命令 syste
我的 nginx 配置如下: proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $re
周围有两个配置文件,/etc/nginx/conf.d/default.conf和 /etc/nginx/nginx.conf,但是启用了哪一个呢?我运行的是 CentOS6.4 和 nginx/1.
我的 Nginx 配置仅适用于根位置,所有其他位置都返回“Cannot GET {location}”,其中位置是域后地址的其余部分。 这是我的/etc/nginx/sites-enabled/def
我在 nginx 中为 node.js 服务器设置了反向代理。 server { listen 80; server_name sub.domain.tld; location
我的应用程序将在两个位置提供静态文件,一个是/my/path/project/static,另一个是/my/path/project/jsutils/static。 我很难让网络服务器在两个目录中查找
我的域名注册商的 DNS 访问我的服务器并获取 nginx 默认页面,因此配置正确 我复制了一个当前正在工作的 nginx 虚拟主机,更改了 server_name和 conf 文件的名称,仅此而已。
这个问题在这里已经有了答案: Can't login in to phpPgAdmin (2 个回答) 3年前关闭。 我在centos中遇到了phpPgAdmin登录的奇怪问题,我做了所有需要的事情
我要为PoC进行的操作是向来自动态后端服务器的网页添加href。使用“ subs_filter”可以很容易地添加href,但是我需要使用响应中嵌入的信息来构造href。 是否可以使用LUA处理来自pr
我有网站服务器,它有两个代理(鱿鱼,CF),它们使用不同的 header 来获取真实的 ip。 我猜 nginx 命令 set_real_ip_from ;real_ip_header X-Forwa
在控制台显示如下: Job for nginx.service failed because the control process exited witherror code. See "syste
我有一个问题,我怀疑是 NGINX 问题。基本上,当我尝试登录到我创建的网站时,出现以下错误…… 您要查找的页面暂时不可用。请稍后再试。 有没有人以前遇到过这个? 最佳答案 如果 NGINX 虚拟主机
这是我的 nginx 配置文件: server { listen 80; server_name localhost; location / {
在我的/etc/nginx/nginx.conf 文件中,我有配置。作为:- user nginx; worker_processes 1; error_log /var/log/nginx/e
有谁知道nginx支持软退出吗?这意味着它会一直运行直到所有连接都消失或超时(超过特定时间间隔)并且在此期间也不允许新连接吗? 例如: nginx stop nginx running (2 conn
有没有办法将 Nginx 配置为类似这样的直接服务器返回 (DSR) 负载平衡器: http://blog.haproxy.com/2011/07/29/layer-4-load-balancing-
我通过 apt-get 安装了 Nginx不久前在 Debian 上,我有几个网站在上面。现在我需要安装一些额外的模块,因为我不想搞砸任何事情,所以我想在执行之前仔细检查我的过程。希望这也能帮助其他不
我知道 Apache 的 pagespeed 模块可以使页面访问更快,所以,我想知道 Nginx 是否有等效的模块? 提前致谢! 最佳答案 https://github.com/pagespeed/n
如何将worker_rlimit_nofile设置为一个更大的数字,它可以是或建议最大为多少? 我正在尝试遵循以下建议: 大多数人遇到的第二个最大限制是 与您的操作系统有关。打开一个shell,su给
我是一名优秀的程序员,十分优秀!