我开始学习 bash 脚本,需要编写一个脚本来安装fastcgi_cache
在 NGINX 上。我需要将 PHP 的默认位置替换为带有fastcgi_cache
设置的位置。
为了清楚起见,我需要替换这个:
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
有了这个:
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock ;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
access_log /var/log/nginx/$SITE_URL.cache.log cache;
fastcgi_cache_key "$mobile$scheme$request_method$host$request_uri";
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache WORDPRESS;
add_header X-Cache-Status $upstream_cache_status ;
}
我相信这可以用 来实现sed
,但我找不到办法。我设法用一种变通方法让它工作,如下所示:
if [ -f "/etc/nginx/sites-enabled/$SITE_URL" ]
then
sed -i.bak '/fastcgi_params;/c\
include fastcgi_params;\
\
access_log /var/log/nginx/'$SITE_URL'.cache.log cache;\
fastcgi_cache_key "$mobile$scheme$request_method$host$request_uri";\
fastcgi_cache_bypass $skip_cache;\
fastcgi_no_cache $skip_cache;\
fastcgi_cache WORDPRESS;\
add_header X-Cache-Status $upstream_cache_status;' /etc/nginx/sites-enabled/$SITE_URL
else
echo ""
echo "This domain do not exist on this server."
echo ""
exit 1
fi
但是如果该fastcgi_params
模式出现在文件的任何其他部分,有时可能会出现,它会破坏所有内容。
我猜想寻找整个块(这是默认的,并且不应该跨域更改)是一个更好的解决方案。只是不知道该怎么做。
答案1
这应该对你有用。
sed -i '/location.*php/{:a;N;/fastcgi_pass/{N;N;d};/ }/b;ba}' <filename>
cat >> <filename> << EOF
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock ;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
access_log /var/log/nginx/$SITE_URL.cache.log cache;
fastcgi_cache_key "$mobile$scheme$request_method$host$request_uri";
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache WORDPRESS;
add_header X-Cache-Status $upstream_cache_status ;
}
EOF
正如以上文章中提到的那样...与配置管理器相比,这不是最佳实践的解决方案,例如木偶,Ansible或者盐。
在损坏的 上运行这些操作的结果nginx.conf
将是不可预测的。