准备工作
为了编译Nginx
源代码,需要标准的GCC
编译器。GCC
的全称为GNU Compiler Collection
, 其由GNU
开发,并以GPL
及LGPL
许可证发行,是自由的类UNIX
即苹果电脑Mac OSX
操作系统的标准编译器。因为GCC
原本只能处理C
语言,所以原名为GNU C
语言编译器,后来得到快速扩展,可处理C++
、Fortran
、Pascal
、Objective-C
、Java
以及Ada
等其他语言。
除此之外,还需要Automake
工具,以完成自动创建Makefile
文件的工作。
由于Nginx
的一些模块需要依赖其他第三方库,通常有pcre
库(支持rewrite
模块)、zlib
库(支持gzip
模块)和openssl
库(支持ssl
模块)等。
安装软件和第三方库
如果已经安装过以上软件,则可以略过;如果没有,可以使用一下命令进行在线安装:
$ yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel
进入正文
创建nginx用户
groupadd nginx
useradd nginx -g nginx -s /sbin/nologin -M
下载Nginx
压缩包
这里下载是当前的稳定版本,若需要下载其他版本,把nginx-1.14.0.tar.gz
换成想要的版本即可。
# opt目录下如果没有 local 目录,使用 mkdir local 创建
$ cd /opt/local
$ wget https://nginx.org/download/nginx-1.14.0.tar.gz
--2018-09-04 03:04:00-- https://nginx.org/download/nginx-1.14.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ...
正在连接 nginx.org (nginx.org)|206.251.255.63|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1016272 (992K) [application/octet-stream]
正在保存至: “nginx-1.14.0.tar.gz”
100%[=========================================================================>] 1,016,272 6.30KB/s 用时 1m 59s
2018-09-04 03:06:02 (8.37 KB/s) - 已保存 “nginx-1.14.0.tar.gz” [1016272/1016272])
解压
下载完成后,使用下面的命令进行解压。
# 解压
$ tar -zxvf nginx-1.14.0.tar.gz
$ cd nginx-1.14.0
$ ll
drwxr-xr-x. 6 1001 1001 4096 9月 3 03:35 auto
-rw-r--r--. 1 1001 1001 286953 4月 17 11:22 CHANGES
-rw-r--r--. 1 1001 1001 437286 4月 17 11:22 CHANGES.ru
drwxr-xr-x. 2 1001 1001 4096 9月 3 22:56 conf
-rwxr-xr-x. 1 1001 1001 2502 4月 17 11:22 configure
drwxr-xr-x. 4 1001 1001 4096 9月 3 03:23 contrib
drwxr-xr-x. 2 1001 1001 4096 9月 3 03:23 html
-rw-r--r--. 1 1001 1001 1397 4月 17 11:22 LICENSE
-rw-r--r--. 1 root root 336 9月 3 03:36 Makefile
drwxr-xr-x. 2 1001 1001 4096 9月 3 03:23 man
drwxr-xr-x. 3 root root 4096 9月 3 03:42 objs
-rw-r--r--. 1 1001 1001 49 4月 17 11:22 README
drwxr-xr-x. 9 1001 1001 4096 9月 3 03:23 src
这里对解压完成后的部分目录和文件做个简单的介绍:
- src 该目录存放了
Nginx
的所有源码; - man 该目录存放了
Nginx
的帮助文档; - html 该目录存放了两个
html
文件。这两个文件与Nginx
服务器的运行相关,这两个文件的作用会在下文给出,这里不做赘述; - conf 该目录存放的是
Nginx
服务器的配置文件,包含Nginx
服务器的基本配置文件; - auto 该目录存放了大量脚本文件,和
configure
脚本程序有关; - configure 该文件是
Nginx
软件的自动脚本程序。运行configure
脚本一般会完成两项工作:一是检查环境,根据环境检查结果生成C
代码;二是生成编译代码需要的Makefile
文件。
编译安装Nginx
在介绍生成Makefile
文件操作之前,先介绍一下configure
脚本支持的常用选项:
选项 | 说明 |
---|---|
--prefix=path | 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx。 |
--sbin-path=path | 设置nginx的可执行文件的路径,默认为 prefix/sbin/nginx. |
--conf-path=path | 设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf. |
--pid-path=path | 设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid. |
--error-log-path=path | 设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为prefix/logs/error.log. |
--http-log-path=path | 设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为prefix/logs/access.log. |
--user=name | 设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。 |
--group=name | 设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。 |
--with-select_module --without-select_module |
启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。 |
--with-poll_module --without-poll_module |
启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。 |
--without-http_gzip_module | 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。 |
--without-http_rewrite_module | 不编译重写模块。编译并运行此模块需要PCRE库支持。 |
--without-http_proxy_module | 不编译http_proxy模块。 |
--with-http_ssl_module | 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。 |
--with-pcre=path | 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。 |
--with-pcre-jit | 编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。 |
--with-zlib=path | 设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。 |
--with-cc-opt=parameters | 置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:--with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支持的文件数量:--with-cc-opt="-D FD_SETSIZE=2048". |
--with-ld-opt=parameters | 设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib". |
了解了如上选项后,就可以根据实际情况使用configure
脚本生成Makefile
文件了。若上面的选项无法满足需求,可自行Google
其他选项,上面介绍的只是其中的一小部分。
生成Makefile文件
使用下面的命令配置并生成Makefile
文件:
# 推荐参数
$ ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --with-pcre-jit --with-http_ssl_module --with-http_v2_module --with-http_sub_module --with-stream --with-stream_ssl_module
checking for OS
+ Linux 3.10.0-862.el7.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
... 这里省略n行
checking for zlib library ... found
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/Nginx"
nginx binary file: "/Nginx/sbin/nginx"
nginx modules path: "/Nginx/modules"
nginx configuration prefix: "/Nginx/conf"
nginx configuration file: "/Nginx/conf/nginx.conf"
nginx pid file: "/Nginx/logs/nginx.pid"
nginx error log file: "/Nginx/logs/error.log"
nginx http access log file: "/Nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
--prefix
配置指定了Nginx
的安装路径,其他的配置使用默认的配置。
在运行过程中,configure
脚本调用auto
目录中的各种脚本对系统环境及相关配置和设置进行了检查。
编译
得到了Makefile
文件后,就可以编译源码了。在当前目录使用命令make
编译源代码:
$ make
make -f objs/Makefile
make[1]: 进入目录“/nginx/nginx-1.14.0”
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
... 这里省略n行
objs/src/http/modules/ngx_http_upstream_zone_module.o \
objs/ngx_modules.o \
-ldl -lpthread -lcrypt -lpcre -lz \
-Wl,-E
sed -e "s|%%PREFIX%%|/Nginx|" \
-e "s|%%PID_PATH%%|/Nginx/logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/Nginx/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/Nginx/logs/error.log|" \
< man/nginx.8 > objs/nginx.8
make[1]: 离开目录“/nginx/nginx-1.14.0”
安装
编译完成后,使用make
的install
命令进行安装:
$ make install
make -f objs/Makefile install
make[1]: 进入目录“/nginx/nginx-1.14.0”
test -d '/Nginx' || mkdir -p '/Nginx'
test -d '/Nginx/sbin' \
|| mkdir -p '/Nginx/sbin'
test ! -f '/Nginx/sbin/nginx' \
|| mv '/Nginx/sbin/nginx' \
'/Nginx/sbin/nginx.old'
... 这里省略n行
test -d '/Nginx/logs' \
|| mkdir -p '/Nginx/logs'
test -d '/Nginx/html' \
|| cp -R html '/Nginx'
test -d '/Nginx/logs' \
|| mkdir -p '/Nginx/logs'
make[1]: 离开目录“/nginx/nginx-1.14.0”
到此,我们已经安装后了一个最基本的Nginx
服务器,其安装路径为/usr/local/nginx
。
后记
安装完成后,将当前目录切换到/usr/local/nginx
,然后查看安装目录包含哪些文件(夹):
$ cd /usr/local/nginx
$ ls *
conf:
fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params
fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default
fastcgi_params koi-win nginx.conf scgi_params.default win-utf
html:
50x.html index.html
logs:
sbin:
nginx
安装目录主要包含 conf
html
logs
sbin
四个目录。
- conf 存放了Nginx的所有配置文件。其中,
nginx.conf
文件是Nginx
服务器的主配置文件,其他配置文件是用来配置Nginx
的相关功能,比如,fastcgi.cong
和fastcgi_params
用来配置fastcgi
。 - html 该目录存放了
Nginx
服务器在运行过程中调用的一些html
文件。index.html
文件是在服务器运行成功后默认返回的网页;50x.html
是在Nginx
服务器出现某些问题时将会调用该页面。 - logs 顾名思义,用来存放
Nginx
服务器的日志。因为目前服务器还未启动,所以该目录为空。 - sbin 只有一个
nginx
文件,该文件就是Nginx
服务器的主程序了。
启动
$ ./sbin/nginx
测试
$ curl localhost
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
若返回类似如上的结果,证明已成功启动。其实,上面返回的是目录/Nginx/html/
下的index.html
文件,可以使用cat /Nginx/html/index.html
命令进行验证。
若是有图形界面,在浏览器访问localhost,可以看到类似下图的页面:
附——常用命令
nginx #启动nginx
nginx -s quit #快速停止nginx
nginx -V #查看版本,以及配置文件地址
nginx -v #查看版本
nginx -s reload|reopen|stop|quit #重新加载配置|重启|快速停止|安全关闭nginx
nginx -h #帮助