是否可以在两个单独的块中定义单个nginx位置?
例如:
server {
listen *:80;
server_name someserver;
location / {
proxy_cache off;
}
location /assets {
proxy_cache mycache;
}
# What do I need to do to get this second root location
# to append to the 1st? If it's even possible.
location / {
proxy_pass http://foo;
}
}
这个想法是根位置有效地成为:
location / {
proxy_cache off;
proxy_pass http://foo;
}
如果您想了解有关 why 的更多信息,请继续阅读。
我正在运行GitLab Omnibus安装。根据{{3}},管理员将自定义nginx配置注入GitLab服务器块。
但是,此注入会将内容添加到终端服务器块而不是特定的位置块。
因此,如果我尝试注入include my_config.conf;
,我会得到:
server {
listen *:80;
server_name someserver;
location / {
proxy_cache off;
}
location /assets {
proxy_cache mycache;
}
include my_config.conf;
}
如果我尝试包含location ^~ / {\n include my_config.conf;\n }\n
,我会得到:
server {
listen *:80;
server_name someserver;
location / {
proxy_cache off;
}
location /assets {
proxy_cache mycache;
}
location ^~ / {
include my_config.conf;
}
}
然后导致nginx配置失败并出现duplicate location "/" in /var/opt/gitlab/nginx/conf/gitlab-http.conf:106
错误。
注意: my_config.conf
包含CORS的add_header
内容,因此需要docs。
答案 0 :(得分:1)
您可能需要了解nginx
processes a request的方式。但位置块不添加,必须单独完成。您可以在server
块中放置某些语句,并允许各个location
块根据需要覆盖(例如proxy_cache
)。
假设您的所有URI都已被代理,您可以使用以下内容:
proxy_cache off;
location / {
proxy_pass http://foo;
}
location /assets {
proxy_cache mycache;
proxy_pass http://foo;
}
可以将常用语句卸载到include
文件。