Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何阻止使用nginx和apache的varnish上的wordpress站点通过http加载?_Wordpress_Apache_Nginx_Varnish - Fatal编程技术网

如何阻止使用nginx和apache的varnish上的wordpress站点通过http加载?

如何阻止使用nginx和apache的varnish上的wordpress站点通过http加载?,wordpress,apache,nginx,varnish,Wordpress,Apache,Nginx,Varnish,我有一个新服务器,配置有: 端口80上的varinsh配置为将直接请求重定向到443 端口443上的nginx转发到清漆 安装在这里的8080WordPress上的apache 当我加载wordpress站点时,所有的js文件都试图在80上加载,并且不安全 Wordpress设置为将WP_HOME和WP_SITEURL覆盖到 我发现一篇文章说我需要这样做: nginx-proxy\u-set\u头X-Forwarded-Proto$方案; 然后在apache vhost配置中: SetEnvIf

我有一个新服务器,配置有: 端口80上的varinsh配置为将直接请求重定向到443 端口443上的nginx转发到清漆 安装在这里的8080WordPress上的apache

当我加载wordpress站点时,所有的js文件都试图在80上加载,并且不安全

Wordpress设置为将WP_HOME和WP_SITEURL覆盖到

我发现一篇文章说我需要这样做: nginx-proxy\u-set\u头X-Forwarded-Proto$方案; 然后在apache vhost配置中: SetEnvIf X-Forwarded-Proto^https$https=on


几年前,我写了一篇关于这个主题的博文。请看一看:

当然,我也会把相关的配置放在这里

Nginx配置 Nginx充当您的TLS终止点,但它向Varnish发送普通HTTP请求

您需要通过Varnish和Apache发送一个X-Forwarded-Proto头,以使它们都知道所使用的协议

您可以在Nginx配置中将以下行添加到代理逻辑中:

proxy_set_header X-Forwarded-Proto $scheme;
Apache配置 如果值不是HTTPS,Apache将处理此X-Forwarded-Proto并执行重定向

如果需要,可以将下面的代码段放入.htaccess文件中:

SetEnvIf X-Forwarded-Proto "https" HTTPS=on
Header append Vary: X-Forwarded-Proto

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
这一功能的简要说明:

检查X-Proto的值 如果X-Forwarded-Proto等于HTTPS,则将环境变量HTTPS设置为ON 设置清漆所需的自定义Vary:X-Forwarded-Proto标头 如果HTTPS未打开且X-Forwarded-Proto不是HTTPS,则在HTTPS上执行重定向 清漆怎么样? 默认情况下,Varnish没有协议感知。您可以编写一些VCL来实现这一点,但幸运的是,HTTP协议具有使用HTTP头实现这一点所需的语义

在关于Apache配置的上一节中,我提到了Vary:X-Forwarded-Proto。这就是Varnish需要区分HTTP和HTTPS内容的地方

若并没有这个Vary头,Varnish将缓存第一个调用的内容,这可能导致缓存混合内容

Vary命令Varnish为X-Forwarded-Proto的每个值创建缓存变量。这将分离HTTP内容和HTTPS内容,并在缓存页面上使用正确的URL方案