Nginx代理-proxy_set_header-site.conf中的自定义标头用于Varnish缓存 信息我想做什么:原因: Varnishlog

问题描述

是否可以在您的网站中发送自定义标头,然后使用proxy_set_header将其转发到Varnish?

信息

我已经稍微移动了文件夹位置-正确包含了所有内容,并且可以正常工作。

我有/etc/nginx/conf.d/params/proxy.params/proxy_params个文件,

proxy_set_header Host $http_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-Port-Nginx $server_port;
proxy_set_header X-Forwarded-DocumentRoot $document_root;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Ssl-Offloaded $scheme;
proxy_set_header X-Forwarded-Custom-Location-Site 'Custom Site';   ### THIS IS THE HEADER I WANT TO BE DYNAMIC
fastcgi_param  HTTPS on;

然后在sites-enabled/custom-site.conf中的我的https服务器块中:

server {
    listen 443 ssl default_server;
    server_tokens off;
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Custom-Location-Site' 'mysite1';
    root /var/www/html;
    server_name nginx-glo 192.168.1.105 localhost:443;

    location / {
        access_log /var/log/nginx/access.log main;
        add_header 'Custom-Nginx-Server-Location-Root-Redirect' 'From /';   #### This header does not appear in varnishlog  (testing only)
        include /etc/nginx/conf.d/params/proxy.params/proxy_params_destination.conf;

相关的proxy_params_destination.conf

server_tokens off;

proxy_redirect off;
include /etc/nginx/conf.d/params/proxy.params/proxy_params;
# Try not to add headers using add_header,this will reset all headers from other locations
# that are redirected here.
# Also do not log to file here,log in locations above.

proxy_headers_hash_bucket_size 356;
proxy_read_timeout 3600;
proxy_connect_timeout 60;
# Cannot use https:// for proxy calls - use http,outside connection is https
proxy_pass http://varnish-cache-magento2.3.5:6081;
#proxy_pass http://web-server-apache2-magento2.3.5:8080;

我想做什么:

  • 我已定义此标头: add_header 'Custom-Location-Site' 'mysite1'在网站conf文件中。

  • 我想从每个网站的标题接收_value,并在此处转发:
    proxy_set_header X-Forwarded-Custom-Location-Site $how_can_I_get_Custom-Location-Site_here;,然后让Varnish缓存在vcl_recv{}中接收此标头

  • 然后我将在vcl_recv{}中处理此转发的标头:
    使用以下示例中描述的req.http.X-Forwarded-Custom-Location-Site

原因:

为多个Magento 2网站设置清漆缓存。

  • 以下Varnish文章中的示例显示了如何使用路径来实现。我无法使用路径,我有多个运行不同网站的Docker容器,然后将其转发到清漆容器。例如,运行PHP 7.2的Container和其他PHP 7.3个网站都在/var/www/html,https内运行

Link to sample multiple backends

样本中的相关部分:

sub vcl_recv {
    if (req.url ~ "^/java/") {
        set req.backend_hint = java;
    } else {
        set req.backend_hint = default;
    }
}

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}
Now let’s add a new backend:

backend java {
    .host = "127.0.0.1";
    .port = "8000";
}

Varnishlog

如此处所示:varnishlog已在Docker容器中接收到我的自定义标头。我现在需要自定义标头的值是动态的。

-   ReqHeader      X-Real-IP: 192.168.1.103
-   ReqHeader      X-Forwarded-For: 192.168.1.103
-   ReqHeader      X-Forwarded-Port-Nginx: 443
-   ReqHeader      X-Forwarded-DocumentRoot: /var/www/html
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      Ssl-Offloaded: https
-   ReqHeader      X-Forwarded-Custom-Location-Site: Custom Site

解决方法

如果我理解正确,这就是您所需要的:

proxy_set_header X-Forwarded-Custom-Location-Site $http_custom_location_site;

这将根据您在X-Forwarded-Custom-Location-site头中配置的server块使Custom-Location-Site动态。

例如,如果Custom-Location-Site的值为mysite1,则X-Forwarded-Custom-Location-site的值将为:

X-Forwarded-Custom-Location-site: mysite1

根据http://nginx.org/en/docs/http/ngx_http_core_module.html#var_http_,您可以将$http_与任何标题一起使用。您只需要小写该值,然后用下划线替换破折号即可。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...