分布式系统架构:技术栈详解与快速进阶
上QQ阅读APP看书,第一时间看更新

4.2 Nginx源码编译安装

以Centos平台编译环境为例,安装Make并编译Gcc/GccDemo的方法如代码清单4-1所示。

代码清单4-1 GccDemo代码

yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++

Nginx重写rewrite,需要安装pcre,而Gzip压缩需要安装zlib,网络转发需要ssl设定源码目录为/usr/local/source。安装pcre、zlib、ssl的方法如代码清单4-2所示。

代码清单4-2 Nginx插件安装

------------pcre-----------------
cd /usr/local/source
wget http:// www.programming.cn/pcre/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make
make install
-----------zlib--------------
wget http:// zlib.net/zlib-1.2.7.tar.gz
tar -zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure
make
make install
-----------ssl--------------
wget https:// www.openssl.org/source/openssl-1.0.1t.tar.gz
tar -zxvf openssl-1.0.1t.tar.gz

Nginx安装的方法如代码清单4-3所示。

代码清单4-3 Nnigx安装

wget http:// nginx.org/download/nginx-1.5.8.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2

下载Nginx包的页面效果如图4-2所示。

068-1

图4-2 下载Nginx包

解压Nginx包,如图4-3所示。

069-1

图4-3 解压Nginx包

具体的Nginx参数配置,如代码清单4-4所示。

代码清单4-4 Nginx参数配置

./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/opt/app/openet/zachary/pcre-8.36 \
--with-zlib=/opt/app/openet/zachary/zlib-1.2.7 \
--with-openssl=/opt/app/openet/zachary/openssl-1.0.1t
make
make install

其中,make用于编译,它从Makefile中读取指令,然后编译;make install用于安装,它也从Makefile中读取指令,将Nginx安装到指定的位置;configure命令用于检测安装平台的目标特征,它定义了系统的各个方面,包括Nginx被允许使用的连接处理的方法,比如它会检测是不是有CC或GCC(并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件)。

Nginx的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配置文件中使用。默认情况下,文件名为prefix/logs/nginx.pid。
  • --error-log-path=path:设置主错误、警告和诊断文件的名称。安装完成后,可以随时改变文件名,在nginx.conf配置文件中使用。默认情况下,文件名为prefix/logs/error.log。
  • --http-log-path=path:设置主请求HTTP服务器的日志文件的名称。安装完成后,可以随时改变文件名,在nginx.conf配置文件中使用。默认情况下,文件名为prefix/logs/access.log。
  • --user=name:设置Nginx工作进程的用户。安装完成后,可以随时更改名称,在nginx.conf配置文件中使用。默认用户名为nobody。
  • --group=name:设置Nginx工作进程的用户组。安装完成后,可以随时更改名称,在nginx.conf配置文件中使用。默认为非特权用户。
  • --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来完成的。
  • --with-pcre-jit:编译PCRE,包含just-in-time compilation(即PCRE 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"。

其中相关路径说明如下:

  • --with-pcre=/usr/src/source/pcre-8.36:pcre-8.36的源码路径。
  • --with-zlib=/usr/src/source/zlib-1.2.7:zlib-1.2.7的源码路径。

安装成功后,/usr/local/nginx目录如下:

fastcgi.conf             koi-win               nginx.conf.default
fastcgi.conf.default     logs                  scgi_params
fastcgi_params           mime.types            scgi_params.default
fastcgi_params.default   mime.types.default    uwsgi_params
html                     nginx                 uwsgi_params.default
koi-utf                  nginx.conf            win-utf

注意

Nginx默认端口是80,启动之前应先检查80端口的使用情况,使用的指令是netstat -ano|grep 80,如果查不到结果则说明该端口未占用,反之,有如下两种处理方式:

  • 更改Nginx默认80端口,通过指令whereis nginx.conf找到默认配置文件,更改方式为listen 80 default_server;
  • 找到占用80端口的应用,然后kill掉该应用以释放80端口。

温馨提示:80端口默认可以隐藏,例如:zachary.sh.cn:80等同于zachary.sh.cn,同理80端口也非常容易受到攻击。建议更换默认端口。