以前装nginx都是用yum命令直接安装,一步到位。现在借着服务器迁移的机会,来次源码安装的实践。
安装版本选择
Nginx官网提供了三个类型的版本
- Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
- Stable version:最新稳定版,生产环境上建议使用的版本
- Legacy versions:遗留的老版本的稳定版
我选择了nginx-1.10.2的稳定版本,下载到/usr/local/src的目录下
|
|
编译
服务器环境
12CentOS Linux release 7.2.1511 (Core)
依赖包安装
nginx在编译和安装的时候需要一些工具和第三包模块,因此先下载安装
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时无需重新编译)
第一次尝试在服务器上编译,就简单的安装配置
|
|
安装和编译,安装成功的标准就是不报错
|
|
完成之后,启动nginx服务器
|
|
至此nginx安装完毕。下面进行一下优化阶段
nginx设置
设置成系统服务,不用每次都使用
./usr/local/nginx/sbin/nginx
,来进行操作服务有系统(system)和用户(user)之分。如果需要开机没有登录情况下就能运行的程序,存在于系统服务(system)里,即:
/lib/systemed/system
反之,用户登录后才能运行的程序,存在于用户服务(user)里:/lib/systemd/user
并且服务都以.service结尾因此,在
/lib/systemed/system
下建立一个nginx.service的文件,添加12345678910111213[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用户才能修改。
1
chmod 754 nginx.service
将nginx设置为系统服务,并开机启动
1
systemctl enable nginx.service
当然也可以使用systemctl来管理nginx的启动和关闭了
123
启动: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的配置文件出现错误
1nginx: [emerg] getpwnam("nginx") failed原因是在安装配置时指定了user=nginx和group=nginx,而现在系统中并没有这个用户组和用户,因此需要先创建对应的组和用户
12groupadd nginxuseradd -g nginx nginx之后测试就通过了。