Apache-2.2

如何檢查是否通過 nginx 配置安裝了 nginx 模組?

  • January 30, 2017

我想要做的是防止在沒有安裝正確模組的 nginx 中執行無效指令的配置段。類似於 Apache 中的 IfModule 指令(http://httpd.apache.org/docs/current/mod/core.html#ifmodule)。nginx中是否存在類似的東西?

<IfModule>如果載入了特定模組,Apache 會應用一組指令。

由於 Nginx 不支持動態模組載入,因此該功能不可用。

來源:http ://trac.nginx.org/nginx/ticket/126

據我所知,無法從配置文件中確定功能的可用性。

如果希望測試對配置的更改是否會在目前設置下起作用,可以在更改生效之前使用 configtest 命令:(nginx -t/etc/init.d/nginx configtest)。這並不理想。

nginx 從 1.9.11 版(2016 年 2 月公告)開始支持動態模組載入。儘管如此,仍然無法根據模組的存在與否來提供替代配置。

不應將動態或靜態載入模組的能力與使用配置文件中的指令測試相關模組是否啟用的能力混為一談。不管模組以何種方式添加到二進製文件中,能夠測試模組化特性是否可用將是一個合理的支持特性。該功能尚不存在,可能除了一些在配置中具有可察覺副作用的模組(例如,添加自定義響應標頭將對請求處理的後續步驟可見)。

如果“腳本膠水”是部署中測試功能的一個選項,則可以在命令行上執行以下操作:nginx -V在編譯時查看已知模組的列表。輸出將混合--with-*--add-dynamic-module標誌。

  • --with-http_v2_module表示靜態編譯成二進製文件的模組(即本例中的 http_v2_module);
  • --add-dynamic-module=/path/to/module_name表示動態模組。load_module module_name.so它可以在不重新編譯 nginx 的情況下使用core 指令啟用(禁用) 。

引用自:https://serverfault.com/questions/513190