我试图编写一个函数来执行文件的健全性检查,然后将它们移动到/etc/nginx/site-available
。 有位于我的主目录,并定期修改。
这些文件中所做的唯一修改是添加一个server_name
。
他们看着像是:
server { listen 80; server_name domain.com; server_name www.domain.com; server_name mynsite1.com; server_name www.mysite1.com; server_name mysite2.com; server_name www.mysite2.com; server_name mysite3.com; server_name www.mysite3.com; server_name mysite4.com; server_name www.mysite4.com; access_log /var/log/nginx/domain.com-access.log main; error_log /var/log/nginx/domain.com-error.log warn; root /var/www/docroot; index index.php index.html index.htm; location / { try_files $uri /app_dev.php; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
这是我现在的function:
verify_nginx() { if [ ! -s "$file1" ]; then echo "-> File \"$file1\" is empty or do not exist" | ts exit 1 elif [ ! -s "$file2" ]; then echo "-> File \"$file2\" is empty or do not exist" | ts exit 1 fi }
我也想在函数中添加nginx -t -c /homedir/file1
,但是出现以下错误:
nginx: [emerg] "server" directive is not allowed here in /homedir/file:1 nginx: configuration file /homedir/file test failed
事实上, nginx -c
期望nginx.conf
不包括我的文件在我的homedir。
我可以把我的文件放在nginx.conf
包含的/etc/nginx/site-available
,但我想在将文件移动到正确的位置之前执行完整性检查。
我的问题:
/etc/nginx/site-available
使用nginx
其他地方的configuration文件? nginx
文件进行什么样的理智检查? 您正在尝试进行健全性检查的文件不是nginx配置文件,因此(可以理解) nginx -t
表示它们是无效的。 -c
标志期望“ 替代配置文件 ”,而不是单个server
块。 server
块住在一个http
块中。
如果你想运行nginx -t
你需要传递一个适当的配置文件,其中包括你正在尝试修改的文件。 正如Etan Reisner所建议的那样,你可以简单地写一个包含你的文件的虚拟nginx.conf
,类似这样的东西可能会起作用(我不是在安装了atm的nginx机器上,所以你可能需要添加更多的stub指令) :
http { include path/to/files/*; }
然后你可以运行nginx -t -c dummy_nginx.conf
。
这虽然有一个问题, 你仍然可以有任何数量的错误,只有当你真正的配置文件加载显示。
相反,您可以在加载之前通过更改来验证您的实际配置文件,只需在reload
之前调用nginx -t
; 如果你想要的话,你可以把它包装在一个bash函数中:
safe_reload() { nginx -t && service nginx reload # only runs if nginx -t succeeds }
你也应该有一些备份或恢复机制。 这可能就像将旧的配置文件复制到并行*.bak
文件一样简单,但更令人愉快的是使用Mercurial或Git等VCS。 你检查你的配置的每一次迭代成功,然后你可以很容易地恢复到以前已知的良好配置,如果出现任何问题。