我有一个(曾经是!)默认的、正常工作的反向代理安装。
一切都按设计由 HTTPS 提供服务。
我跳过了几个版本,遇到了“死亡升级”,屏幕一直空白,正如这里报告的:Upgrade discourse doesn't work - #6 by Andrew_Bond
我已通过 ./launcher rebuild app 手动更新了我的 discourse,并且正在使用版本 2.9.0.beta14(0da79561c3)。
我注意到,如果尝试保存草稿,或执行大多数其他操作(如发帖、登录),我就会收到 403 禁止错误(通过 Chrome 检查器)。
不过,我的 Logo 在网站的左上角可以正常显示。
如果我通过命令行手动禁用强制 HTTPS 功能,Logo 就会加载失败,因为我处于混合模式,HTTP 元素被阻止。网站的所有其他元素继续正常工作。
我没有对反向 Nginx 进行任何更改。我尝试再次重建应用程序,但没有成功。
我建议,在我从其升级的构建版本中,Discourse 的工作方式发生了一些变化。这是我能找到的最后一个可以正常使用强制 HTTPS 选项的版本 ID:e9f53dbe0028ca7a5d8926711a1944765d34347
现在捕获的错误:
2 个赞
david
(David Taylor)
3
您好 Andrew - 感谢您的报告。此问题特别影响反向代理配置,其中在请求到达应用程序容器之前会添加多个 X-Forwarded-Proto 标头。
我刚刚将一个修复程序合并到了 main 中 - 它应该会在大约 20 分钟后进入 tests-passed。
一旦它出现在 tests-passed 中,您就需要进行完全重建(基于 UI 的升级期间不会应用 nginx 配置更改)。
8 个赞
所以,更新一下。
我已使用 ./launcher rebuild app 重新构建了应用程序。
那里没有问题。
强制 HTTPS 时错误已消失,但出现以下例外:
我不再收到 403 拒绝访问的错误,但例如在尝试登录时,会弹出登录框,似乎接受了数据,然后再次显示未登录用户:
重新加载页面时会出现与上述相同的错误。
我已再次禁用强制 HTTPS,网站可以正常工作——但为了清楚起见,徽标仍未提供。
1 个赞
david
(David Taylor)
6
该错误无关紧要——它是由 Cloudflare 注入分析脚本引起的(并且 Discourse 的默认内容安全策略会阻止注入)。
您能否分享更多关于您在用户和 Discourse 之间使用的代理的信息?我猜 Cloudflare 是第一层?在 Cloudflare 和 Discourse 应用容器之间还有什么?
3 个赞
当然!\n\n你说得对。Cloudflare 是第一个命中,然后我们有 centminmod 提供的 nginx 反向代理到 docker。
david
(David Taylor)
8
您能分享一下您的配置吗?特别是,它是否添加了额外的 X-Forwarded-Proto 标头?
好的!
# Centmin Mod 入门指南
# 必须阅读 https://centminmod.com/getstarted.html
# 用于 HTTP/2 SSL 设置
# 阅读 https://centminmod.com/nginx_configure_https_ssl_spdy.html
# 从 www 重定向到非 www 强制 SSL
# 取消注释、保存文件并重启 Nginx 以启用
# 如果不确定,请在使用 return 301 之前使用 return 302
server {
listen 80;
server_name exiges.com www.exiges.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name exiges.com www.exiges.com;
ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
ssl_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
include /usr/local/nginx/conf/ssl_include.conf;
# Cloudflare 认证源拉取证书 community.centminmod.com/threads/13847/
#ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
#ssl_verify_client on;
# Mozilla 推荐
ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
ssl_prefer_server_ciphers on;
#add_header Alternate-Protocol 443:npn-spdy/3;
# 在启用 HSTS 之前,请阅读 centminmod.com/nginx_domain_dns_setup.html#hsts
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
#add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Referrer-Policy "strict-origin-when-cross-origin";
#add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
#spdy_headers_comp 5;
ssl_buffer_size 1369;
ssl_session_tickets on;
# 启用 OCSP 装订
#resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
#resolver_timeout 10s;
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;
# ngx_pagespeed 和 ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
# limit_conn limit_per_ip 16;
# ssi on;
access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
error_log /home/nginx/domains/exiges.com/log/error.log;
include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
root /home/nginx/domains/exiges.com/public;
# 如果使用 Cloudflare 作为服务器和/或虚拟主机站点,请取消注释 cloudflare.conf include
#include /usr/local/nginx/conf/cloudflare.conf;
include /usr/local/nginx/conf/503include-main.conf;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
include /usr/local/nginx/conf/php.conf;
#include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
#include /usr/local/nginx/conf/pre-staticfiles-global.conf;
#include /usr/local/nginx/conf/staticfiles.conf;
#include /usr/local/nginx/conf/drop.conf;
#include /usr/local/nginx/conf/errorpage.conf;
#include /usr/local/nginx/conf/vts_server.conf;
}
我看到了 x-proto 标头的引用……
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1 个赞
david
(David Taylor)
10
Cloudflare 如何连接到您的源站?它是否正在使用 SSL/TLS?理想情况下,您应该在此处使用“Full”或“Full (Strict)”设置。
david
(David Taylor)
12
我建议您使用 Cloudflare 的安全 SSL 选项之一。“灵活”意味着 Cloudflare 和您的服务器之间的流量未加密。
再次查看配置:
看起来您将标头设置为 https,然后在下面两行将其再次设置为 $scheme(根据您的 Cloudflare 配置,这将是 http)。如果删除第二个,Discourse 将被告知连接是安全的(即使它不是)。
4 个赞
david
(David Taylor)
14
我怀疑(但尚未100%确认)Discourse容器NGINX之前查看的是“第一个”X-Forwarded-Proto头。现在,它查看的是“最后一个”X-Forwarded-Proto头,这可以说更安全,因为它来自“最近”的代理,该代理拥有关于传入请求的最多信息。
因此,在更新之前,它查看的是Cloudflare(https)引入的X-Forwarded-Proto头。现在,它查看的是您的“centminmod”反向代理配置(http)引入的X-Forwarded-Proto头。
3 个赞
我已从配置中删除 proxy_set_header X-Forwarded-Proto $scheme;,现在配置可以正常工作。
对于正在阅读并配置 centminmod 的各位,nginx 有两个配置文件。
一个用于 http,一个用于 https。
我已从 http 配置中删除了第二个 proxy_set_header X-Forwarded-Proto $scheme;,现在一切都按预期工作。
这是我的 exiges.com.conf
# Centmin Mod 入门指南
# 必须阅读 https://centminmod.com/getstarted.html
# 从非 www 重定向到 www
# 取消注释,保存文件并重启 Nginx 以启用
# 如果不确定,请在使用 return 301 之前使用 return 302
#server {
# listen 80;
# server_name exiges.com;
# return 301 $scheme://www.exiges.com$request_uri;
# }
server {
server_name exiges.com www.exiges.com;
#return 301 https://exiges.com.com$request_uri;
#return 301 $scheme://www.exiges.com$request_uri;
# ngx_pagespeed 和 ngx_pagespeed 处理程序
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
#add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Referrer-Policy "strict-origin-when-cross-origin";
#add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
# limit_conn limit_per_ip 16;
# ssi on;
access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
error_log /home/nginx/domains/exiges.com/log/error.log;
include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
root /home/nginx/domains/exiges.com/public;
# 如果使用 cloudflare 进行服务器和/或虚拟主机站点,请取消注释 cloudflare.conf include
#include /usr/local/nginx/conf/cloudflare.conf;
include /usr/local/nginx/conf/503include-main.conf;
# 防止访问 ./目录和文件
#location ~ (?:^|/)\. {
# deny all;
# }
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header X-Forwarded-Proto https;
#proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
#include /usr/local/nginx/conf/503include-only.conf;
# 阻止常见的漏洞、SQL 注入等
#include /usr/local/nginx/conf/block.conf;
# 在找不到索引文件时启用目录列表
#autoindex on;
# 显示本地时间的列表文件时间
#autoindex_localtime on;
# Wordpress 固定链接示例
#try_files $uri $uri/ /index.php?q=$uri&$args;
}
include /usr/local/nginx/conf/php.conf;
#include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
#include /usr/local/nginx/conf/pre-staticfiles-global.conf;
#include /usr/local/nginx/conf/staticfiles.conf;
#include /usr/local/nginx/conf/drop.conf;
#include /usr/local/nginx/conf/errorpage.conf;
#include /usr/local/nginx/conf/vts_server.conf;
}
这是我的 exiges.com.conf.ssl
# Centmin Mod 入门指南
# 必须阅读 https://centminmod.com/getstarted.html
# 对于 HTTP/2 SSL 设置
# 阅读 https://centminmod.com/nginx_configure_https_ssl_spdy.html
# 从 www 重定向到非 www 强制 SSL
# 取消注释,保存文件并重启 Nginx 以启用
# 如果不确定,请在使用 return 301 之前使用 return 302
# server {
# listen 80;
# server_name exiges.com www.exiges.com;
# return 302 https://$server_name$request_uri;
# }
server {
listen 443 ssl http2;
server_name exiges.com www.exiges.com;
ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
ssl_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
include /usr/local/nginx/conf/ssl_include.conf;
# cloudflare 认证源拉取 cert community.centminmod.com/threads/13847/
#ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
#ssl_verify_client on;
# mozilla 推荐
ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
ssl_prefer_server_ciphers on;
#add_header Alternate-Protocol 443:npn-spdy/3;
# 在启用 HSTS 之前,请阅读 centminmod.com/nginx_domain_dns_setup.html#hsts
#add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
#add_header X-Frame-Options SAMEORIGIN;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Referrer-Policy "strict-origin-when-cross-origin";
#add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
#spdy_headers_comp 5;
ssl_buffer_size 1369;
ssl_session_tickets on;
# 启用 ocsp 装订
#resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
#resolver_timeout 10s;
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;
# ngx_pagespeed 和 ngx_pagespeed 处理程序
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;
# limit_conn limit_per_ip 16;
# ssi on;
access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
error_log /home/nginx/domains/exiges.com/log/error.log;
include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
root /home/nginx/domains/exiges.com/public;
# 如果使用 cloudflare 进行服务器和/或虚拟主机站点,请取消注释 cloudflare.conf include
include /usr/local/nginx/conf/cloudflare.conf;
include /usr/local/nginx/conf/503include-main.conf;
location / {
proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
proxy_set_header X-Forwarded-Proto https;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
include /usr/local/nginx/conf/php.conf;
#include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
#include /usr/local/nginx/conf/pre-staticfiles-global.conf;
#include /usr/local/nginx/conf/staticfiles.conf;
#include /usr/local/nginx/conf/drop.conf;
#include /usr/local/nginx/conf/errorpage.conf;
#include /usr/local/nginx/conf/vts_server.conf;
}
@david 非常感谢您抽出宝贵时间来解决这个问题。
就我而言,我现在是完全的,证书方面没有灵活性。
1 个赞
system
(system)
关闭
16
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.