Nginx(engine x)是一款是由俄罗斯的程序设计师Igor Sysoev所开发 高性能 的 Web 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
下面我们详细介绍在 CentOS 8 系统下通过源码安装 Nginx, 如果是 ubuntu 或者 debian 系统,将 yum -y
或者dnf insall -y
换成apt-get
,依赖后缀-devel
改成-dev
基本都可以。
如果不是root
用户,请在命令前面加上sudo
获取安装权限。
1 准备工作:编译工具和库
因为从源码编译安装,所以一些编译工具和库文件是必须的,如下是从RedHat或者CentOS中安装这些工具和库:
$ yum -y install make zlib-devel gcc-c++ libtool openssl-devel pcre-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed
如果是Ubuntu或者Debian,对应命令为:
$ apt-get update
$ apt-get install make zlib1g-dev build-essential libtool libssl-dev # 通用工具和库,可以通过apt-cache search命令查找对应的包
2 下载依赖源码
2.1 安装 PCRE
PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式),它作用是让 Ngnix 支持 Rewrite 功能。
$ pcre-config --version # 查看上面命令安装的 PCRE 版本
8.45
$ wget https://ftp.pcre.org/pub/pcre/pcre-8.45.tar.gz # 下载
tar zxf pcre-8.45.tar.gz # 解压
2.2 安装 zib
zib 可以用于压缩 header,减少网络宽带占用,nginx 的 ngx_http_gzip_module
模块依赖于该工具。
$ head /usr/include/zlib.h
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.11, January 15th, 2017
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ tar -zxf zlib-1.2.11.tar.gz
3 安装 Nginx
下载并解压 Nginx 源码包:
$ wget http://nginx.org/download/nginx-1.21.0.tar.gz # 下载Nginx
$ tar zxvf nginx-1.8.0.tar.gz # 解压
$ cd nginx-1.8.0 # 进入源码目录
然后,配置 Makefile,示例如下:
$ ./configure \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--user=nginx \
--group=nginx \
--modules-path=/usr/lib64/nginx/modules \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-stream \
--with-mail=dynamic \
--with-pcre=../pcre-8.45 \
--with-zlib=../zlib-1.2.11
各个选项的作用,请参考 Nginx 官网的 Building nginx from Sources 。
如果要增加其他的扩展,比如geoip2
,则可以在 ./configure
后面继续加:
--add-dynamic-module=../ngx_http_geoip2_module-3.3
配置完成后,再编译安装
$ make
$ sudo make install
$ nginx -v # 查看版本
4 启动 Nginx
先检查 Nginx 配置文件语法:
nginx -t
如果报错:
nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so" version 1014001 instead of 1021000 in /usr/share/nginx/modules/mod-http-image-filter.conf:1
nginx: configuration file /etc/nginx/nginx.conf test failed
说明有旧版本的 Nginx 模块,进到目录 /usr/share/nginx/modules
,重命名这些不需要 .conf
扩展文件,后面都加个.bak
。
然后再测试一遍,没语法错误再启动 Nginx。
$ systemctl start nginx
用 ps 命令可以检查是否启动成功,如下:
$ ps -ef|grep nginx
root 20203 1 0 04:43 ? 00:00:00 nginx: master process /usr/sbin/nginx
www 20204 20203 0 04:43 ? 00:00:00 nginx: worker process
www 20205 20203 0 04:43 ? 00:00:00 nginx: worker process
root 20207 10085 0 04:44 pts/2 00:00:00 grep nginx
从浏览器访问我们配置的站点IP:
5 Nginx常用命令
以下包含了 Nginx 常用的几个命令:
/usr/sbin/nginx -s reload # 重新载入配置文件
/usr/sbin/nginx -s reopen # 重启 Nginx
/usr/sbin/nginx -s stop # 停止 Nginx
到此,Ngnix 安装完毕。
参考资料: