oli*_*jkb 30 files configuration nginx
我的 nginx 默认配置文件变得很大。我想将它拆分为较小的配置文件,每个文件只包含一个,每个文件最多 4 个位置,以便我可以快速启用/禁用它们。
实际文件如下所示:
server {
listen 80 default_server;
root /var/www/
location /1 {
config info...;
}
location /2 {
config info....;
}
location /abc {
proxy_pass...;
}
location /xyz {
fastcgi_pass....;
}
location /5678ab {
config info...;
}
location /admin {
config info....;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想将其拆分为每个文件中只有几个位置(属于一起的位置),那么在不引起混乱的情况下执行此操作的正确方法是什么(例如在每个文件中声明根,因此有奇怪的路径是 nginx尝试查找文件)?
FLX*_*LXN 42
您可能正在寻找 Nginx 的include
功能:http :
//nginx.org/en/docs/ngx_core_module.html#include
你可以这样使用它:
server {
listen 80;
server_name example.com;
[…]
include conf/location.conf;
}
Run Code Online (Sandbox Code Playgroud)
include 也接受通配符,所以你也可以写
include include/*.conf;
Run Code Online (Sandbox Code Playgroud)
将每个 *.conf 文件包含在目录include 中。
您可以使用以下命令创建站点文件夹
mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
Run Code Online (Sandbox Code Playgroud)
# 然后将你的大your_config.conf
文件拆分成小文件sites-available/
:
YOURCONF="/etc/nginx/conf.d/your_config.conf"
cd /etc/nginx
mkdir -p sites-available sites-enabled
cd sites-available/
csplit "$YOURCONF" '/^\s*server\s*{*$/' {*}
for i in xx*; do
new=$(grep -oPm1 '(?<=server_name).+(?=;)' $i|sed -e 's/\(\w\) /\1_/g'|xargs);
if [[ -e $new.conf ]] ; then
echo "" >>$new.conf
cat "$i">>$new.conf
rm "$i"
else
mv "$i" $new.conf
fi
done
Run Code Online (Sandbox Code Playgroud)
(我从这个来源增强了这一点:https : //stackoverflow.com/a/9635153/1069083)
一定要在http
你的块内的最后添加这个/etc/nginx/conf.d/*.conf;
:
include /etc/nginx/sites-enabled/*.conf;
Run Code Online (Sandbox Code Playgroud)
注意:server
块外的注释被切到每个文件的底部,所以在server
块之前不应该有注释。将第一行中的注释移到块内,例如:
# don't put comments here
server {
# put your comments about domain xyz.org here
listen 80;
server_name xyz.org;
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46361 次 |
最近记录: |