Nginx源码安装

以前装nginx都是用yum命令直接安装,一步到位。现在借着服务器迁移的机会,来次源码安装的实践。

安装版本选择

Nginx官网提供了三个类型的版本

  • Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
  • Stable version:最新稳定版,生产环境上建议使用的版本
  • Legacy versions:遗留的老版本的稳定版
我选择了nginx-1.10.2的稳定版本,下载到/usr/local/src的目录下1 # wget http://nginx.org//download/nginx-1.10.2.tar.gz 2 //解压3 # tar zxvf nginx-1.10.2.tar.gz

编译

  1. 服务器环境
1# cat /etc/redhat-release 2CentOS Linux release 7.2.1511 (Core)
  1. 依赖包安装
  2. nginx在编译和安装的时候需要一些工具和第三包模块,因此先下载安装
1# yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
  1. 编译配置项

nginx大部分常用模块,编译时./configure –help以–without开头的都默认安装。

  • –prefix=PATH : 指定nginx的安装目录。默认 /usr/local/nginx
  • –conf-path=PATH : 设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf
  • –user=name: 设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。–group=name类似
  • –with-pcre : 设置PCRE库的源码路径,如果已通过yum方式安装,使用–with-pcre自动找到库文件。使用–with-pcre=PATH时,需要从PCRE网站下载pcre库的源码(版本4.4 – 8.30)并解压,剩下的就交给Nginx的./configure和make来完成。perl正则表达式使用在location指令和 ngx_http_rewrite_module模块中。
  • –with-zlib=PATH : 指定 zlib(版本1.1.3 – 1.2.5)的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module时需要使用zlib 。
  • –with-http_ssl_module : 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装
  • –with-http_stub_status_module : 用来监控 Nginx 的当前状态
  • –with-http_realip_module : 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址
  • –add-module=PATH : 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译)
第一次尝试在服务器上编译,就简单的安装配置1./configure 2		--user=nginx\3		--group=nginx\4		--with-http_ssl_module\5		--with-http_gzip_static_module\6		--with-http_realip_module\7		--with-http_stub_status_module

安装和编译,安装成功的标准就是不报错

1 make && make install

完成之后,启动nginx服务器

1./usr/local/nginx/sbin/nginx

至此nginx安装完毕。下面进行一下优化阶段

nginx设置

  1. 设置成系统服务,不用每次都使用./usr/local/nginx/sbin/nginx ,来进行操作

服务有系统(system)和用户(user)之分。如果需要开机没有登录情况下就能运行的程序,存在于系统服务(system)里,即:/lib/systemed/system反之,用户登录后才能运行的程序,存在于用户服务(user)里:/lib/systemd/user并且服务都以.service结尾

  1. 因此,在/lib/systemed/system下建立一个nginx.service的文件,添加
[Unit]Description=nginx.serviceAfter=network.target[Service]Type=forkingExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/usr/local/nginx/sbin/nginx -s stopPrivateTmp=true[Install]WantedBy=multi-user.target然后将文件的权限修改为754,只有root用户才能修改。1chmod 754 nginx.service将nginx设置为系统服务,并开机启动1systemctl enable nginx.service当然也可以使用systemctl来管理nginx的启动和关闭了启动:systemctl start nginx.service关闭:systemctl stop nginx.service状态:systemctl status nginx.service对于喜欢用systemctl的我,感觉就是棒棒的 将 nginx 作为系统服务管理,下载 [nginx](http://sean-images.qiniudn.com/nginx) 到/etc/init.d/,修改里面的路径然后赋予可执行权限1# service nginx {start|stop|status|restart|reload|configtest}

nginx常用命令

nginx -s reload 重启nginx -t 测试配置文件nginx -s stop 关闭nginxnginx -v nginx 版本nginx -V nginx编译时的配置项

安装时的错误汇总

  1. 测试nginx的配置文件出现错误
1nginx: [emerg] getpwnam("nginx") failed原因是在安装配置时指定了user=nginx和group=nginx,而现在系统中并没有这个用户组和用户,因此需要先创建对应的组和用户groupadd nginx useradd -g nginx nginx
  1. 之后测试就通过了。