【问题标题】:nginx - add module for specific location using inheritancenginx - 使用继承为特定位置添加模块
【发布时间】:2019-02-27 22:08:48
【问题描述】:

我想为特定位置增加client_max_body_size参数。

我试图在location 中做类似的事情

location / {
    proxy_pass http://dashboard-app;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto https;
    proxy_cache_bypass $http_upgrade;

    location /admin/upload {
        client_max_body_size 10m;
    }
}

问题在于/admin/upload 位置中没有proxy_pass 或所有其他模块,所以我正在为该路线获取404

我知道我可以在该位置添加所有模块,但这只是代码的重复,对我来说似乎没用。

如何将基本位置模块继承到上传位置配置文件?

【问题讨论】:

  • 必须复制 include 相同的配置
  • 鉴于您问题中的示例,只有 proxy_passclient_max_body_size 需要在新的 location 中 - 其他语句将被继承。但include directive 也可用于卸载大量重复语句。
  • @RichardSmith 为什么会继承其他模块而proxy_pass 不会?我在哪里可以看到哪些模块是继承的,哪些不是?
  • 查看我评论中的参考资料,特别注意“上下文”。

标签: nginx


【解决方案1】:

哪些模块是继承的,哪些不是?

此问题在文档中没有明确表达。您需要单独检查每个指令。

一般来说,命令是不被继承的,options是被继承的,选项数组(“数组类型指令”)是被继承的,但是全部替换(例如,无法在下降器中add header,所有标题都将被替换)。

请参阅:Directive Inheritance in Nested Location Blocks 答案。

如何避免代码重复?

nginx 方面只能使用 include 指令。 另外,recommended way 是使用第三方工具(例如模板引擎)从简洁的源代码生成 nginx 配置。

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多