4

Ubuntu以apt-get 方式安装nginx后,如何增加扩展模块?

 3 years ago
source link: https://xushanxiang.com/2021/01/ubuntu-nginx-apt-get-nginx-add-third-party-modules.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、【nginx -V】查看nginx版本、已安装模块

root@ubuntu:/usr/local/src# /usr/sbin/nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

★ubuntu apt-get 目前默认安装完nginx后是1.4.6版的,以下是对该版本的升级。

Nginx Stable PPA是由Ubuntu社区维护的源,本源更新自稳定版分支,是Kaijia目前使用的源,这个源的特点是文件的目录结构和Ubuntu自带的Nginx相同,因此安装这个版本时不需要修改/etc/nginx/下面的配置文件。

不过这个源更新比较慢,一般Nginx新版本发布后要过一至两周才会更新,但质量是保证的。

安装此源只需要在终端中运行:
apt-add-repository ppa:nginx/stable
然后即可安装Nginx
apt-get update
apt-get install nginx

Ubuntu下升级nginx到最新版
1. 执行如下命令
lsb_release –a【安装 sudo apt-get install lsb-core】
获取ubuntu的Codename,我的系统是 trusty,记住这个代号

2. 编辑/etc/apt/source.list,加入如下内容
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
然后执行 apt-get update 和 apt-get install nginx 获取当前比较新的稳定版本的nginx。如果出现错误如:W: GPG error: http://nginx.org trusty InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62,则执行sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys ABF5BD827BD9BF62,再执行 apt-get update 和 apt-get install nginx 。

想要知道nginx安装都被放在那里,简单的使用 whereis nginx 即可。此种方式安装的nginx,配置文件在/etc/nginx/目录下。

3. 可创建用户专用与nginx
groupadd nginx
useradd –g nginx nginx
修改配置文件
/etc/nginx/nginx.conf
首行 user nginx; 即可使用当前创建的nginx用户运行。

★另外,彻底卸载Nginx的步骤如下:

1、停止nginx的服务
sudo service nginx stop
2、删除nginx,–purge包括配置文件
sudo apt-get –purge remove nginx
3、自动移除全部不使用的软件包
sudo apt-get autoremove
4、列出与nginx相关的软件 并删除显示的软件
dpkg –get-selections|grep nginx
sudo apt-get –purge remove nginx
sudo apt-get –purge remove nginx-common
sudo apt-get –purge remove nginx-core
5、再次执行
dpkg –get-selections|grep nginx
which nginx # 不在显示nginx

二、下载 nginx 源码

nginx 添加新的模块必须要重新编译,所以先下载 nginx 源码。

cd /usr/local/src
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxf nginx-1.18.0.tar.gz

三、下载 ngx-waf 模块源码

在这里以安装ngx-waf 模块为例,其是一个用于 nginx 的没有复杂配置的 Web 应用防火墙模块。(相关文档请看https://github.com/ADD-SP/ngx_waf/blob/master/README-ZH-CN.md)

cd /usr/local/src
git clone https://github.com/ADD-SP/ngx_waf.git
cd ngx_waf

推荐使用 nginx-1.18.0 的源码,若使用低版本的 nginx 源码则不保证本模块可以正常使用。

四、编译和安装模块(静态)

从 nginx-1.9.11 开始,nginx 开始支持动态模块。

静态模块将所有模块编译进一个二进制文件中,所以增删改模块都需要重新编译 nginx 并替换。

动态模块则动态加载 .so 文件,无需重新编译整个 nginx。只需要将模块编译成 .so 文件然后修改nginx.conf即可加载对应的模块。

root@ubuntu:/usr/local/src# apt-get install gcc make [注:若没安装的话,下同]
root@ubuntu:/usr/local/src# apt-get install uthash-dev libssl-dev
root@ubuntu:/usr/local/src# apt-get install libpcre3 libpcre3-dev
root@ubuntu:/usr/local/src# apt-get install libxml2 libxml2-dev libxslt-dev
root@ubuntu:/usr/local/src# apt-get install libgd2-xpm
root@ubuntu:/usr/local/src# apt-get install libgd2-xpm-dev
root@ubuntu:/usr/local/src# apt-get install geoip-database libgeoip-dev
root@ubuntu:/usr/local/src# cd nginx-1.18.0
root@ubuntu:/usr/local/src/nginx-1.18.0/# ./configure xxx --add-module=/usr/local/src/ngx_waf

./configure xxx –add-module=/usr/local/src/ngx_waf

xxx 为其它的编译参数,一般来说是将 xxx 替换为nginx -V显示的编译参数。

如果运行失败,一般报 xxx not found 的错误, 通过执行apt-get install xxx或 apt-get install xxx-dev来解决。

编译结果部分如下:

......
ngx_http_waf_module was configured
......

nginx path prefix: "/etc/nginx"
nginx binary file: "/usr/sbin/nginx"
nginx modules path: "/usr/lib/nginx/modules"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/cache/nginx/client_temp"
nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"
nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"
nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"
nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"

必须是无任何报错才是编译成功。编译完成接着执行make,注意make完不要make install不然的话就等于是通过源码直接编译安装nginx,用不着上面apt-get install nginx了)

编译完成后回再当前Nginx目录下objs文件下出现nginx可执行文件。

替换Nginx可执行文件,可以先保存一份之前,防止错误无法恢复。mv /usr/sbin/nginx /usr/sbin/nginx.bak,cp objs/nginx /usr/sbin/,此时新模块就加载完了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK