Nginx实践-认识与安装

Nginx是一个小巧、高性能的Web服务器,但它作用并不局限于此,它可以应用于反向代理、负载均衡、POP3/SMTP或者HTTP缓存等服务,功能非常强大。Nginx是开源免费并且支持多平台。

Nginx于2004推出初始版本,发展到现在已经非常成熟了,被广大开发者使用,早期的PHP组合环境是经典的LAMP(Linux+Apache+MySQL+PHP),现在变成了火热的LNMP(LINUX+Nginx+MySQL/MariaDB+PHP),可以看出Nginx有取代Apache地位的趋势,相比Apache服务器,Nginx非常地高效,且体积小。

Windows平台安装

我使用的操作系统为Windows 10 64bit。

首先下载Nginx的安装包,到http://nginx.org/en/download.html找到Windows下载源。

我选择的是最新稳定版本1.12.0:nginx/Windows-1.12.0

文件非常小巧,只有1.38MB

下载完成之后是一个压缩包,其实Nginx不需要安装,只需要解压就可以正常使用。

这是Nginx解压之后大概的目录结构:

1
2
3
4
5
6
7
├─conf # 配置文件存放目录
├─contrib # 存放工具和配置
├─docs # 说明文档
├─html # 网页、脚本文件存放目录
├─logs # 日志文件存放目录
├─temp # 临时数据存放目录
└─nginx.exe # Nginx启动入口

其实解压出来之后,我们就可以开始启动Nginx来测试。

打开CMD或者PowerShell切换当前目录到Nginx根目录,执行Nginx二进制文件:

1
PS H:\nginx-1.12.0> .\nginx.exe

启动之后,打开浏览器浏览本地80端口地址217.0.0.1,如果正常的话,我们可以看到Nginx的欢迎页面,其实这个页面是来自Nginx根目录下的html目录中index.html文件。

如果启动失败,请确认80端口是否被启动服务占用,nginx默认的监听端口为80端口。

Nginx启动之后是后台运行,关闭终端并不能关闭Nginx,可以在终端使用Nginx命令来关闭Nginx:

1
PS H:\nginx-1.12.0> .\nginx.exe -s stop

更多的Nginx命令可是使用nginx.exe -h查看

CentOS 坏境安装

我是用的Linux环境为docker构建的CentOS 6.5系统

yum源安装

使用yum安装比较简单,只需声明安装的库即可,但是CentOS的yum默并没有包含Nginx,我们需要手动配置一下。

在/etc/yum.repos.d/目录下新建一个nginx.repo仓库配置文件

1
[root@f2c03e85f3aa yum.repos.d]# vim nginx.repo

nginx.repo文件具体内容:

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

保存之后,执行yum安装命令:

1
yum install -y nginx

安装完之后,启动ninx服务

1
2
[root@f2c03e85f3aa yum.repos.d]# service nginx start
Starting nginx: [ OK ]

我是在docker容器中运行,之前没有配置暴露80端口,只暴露了6379端口,这次先不配置nginx端口,我直接在终端下用终端浏览器w3m访问nginx的80端口:

1
2
3
4
5
6
7
8
9
10
[root@f2c03e85f3aa yum.repos.d]# w3m http://127.0.0.1
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的欢迎页面,成功了!

来看看install之后,系统中生成了跟nginx的文件有哪些:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@f2c03e85f3aa /]# find / -name nginx
/usr/lib64/nginx
/usr/share/nginx
/usr/sbin/nginx
/var/lock/subsys/nginx
/var/log/nginx
/var/cache/yum/x86_64/6/nginx
/var/cache/nginx
/var/lib/yum/repos/x86_64/6/nginx
/etc/rc.d/init.d/nginx
/etc/logrotate.d/nginx
/etc/sysconfig/nginx
/etc/nginx

主要介绍几个重要的目录:

  • bin和sbin下面的是nginx的二进制可执行文件
  • /var/log/nginx目录是nginx的日志文件
  • /etc/nginx是配置文件存放的目录
  • /usr/share/nginx/下一般存放web资源

默认的html存放目录为/usr/share/nginx/html

如果需要关闭nginx,则执行

1
service nginx stop

如果你在linux可以正常访问nginx,但是外部无法访问,你首先要确定外部主机是否能访问服务器的ip,并且防火墙是否放行了80端口。

配置iptables开放80端口,执行一下命令,放行80端口,并保存配置重启iptables(注意:eth0是你的网卡标识,应该根据自身情况配置):

1
2
3
iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
service iptables save
service iptables restart

编译安装

与yum源安装相比,编译安装就显得比较繁琐,但是编译安装也是有优势的,它安装之后,软件的体积比yum安装的更小,因为是在运行环境的内核编译,所以更加稳定。

编译安装需要用到gcc编译器,首先得安装gcc编译器才行,如果你没有,你可以通过以下命令安装:

1
yum install -y gcc

由于Nginx的重写模块需要正则库pcre的支持,需要安装pcre,在编译Ngnix的时候指定pcre作为配置的一部分,还有HTTP的gzip功能需要用到zlib库。

安装PCRE库和Zlib和相关的开发依赖:

1
yum install pcre pcre-devel zlib zlib-devel

首先从http://nginx.org/download/nginx-1.12.0.tar.gz下载nginx 1.12源码,使用wget命令:

1
wget http://nginx.org/download/nginx-1.12.0.tar.gz

下载完成后开始解压

1
2
3
[root@f2c03e85f3aa tools]# ls
nginx-1.12.0.tar.gz
[root@f2c03e85f3aa tools]# tar zxvf nginx-1.12.0.tar.gz

执行编译前检查依赖与配置,并且指定安装的路径为/usr/local/nginx,当然你可以根据自己的情况修改。

1
[root@f2c03e85f3aa nginx-1.12.0]# ./configure --prefix=/usr/local/nginx

其它参数可以根据自己的需求配置,以下给出官方的说明:

  • –prefix=path 安装目录,默认是/usr/local/nginx
  • –sbin-path=path 设置nginx可执行文件的路径和名字,默认是prefix/sbin/nginx
  • –conf-path=path 设置配置文件nginx.conf的路径和名字,默认是prefix/conf/nginx.conf,安装之后,也可以通过命令行参数-c file来指定运行加载的具体的配置文件
  • –pid-path=path 设置pid文件的路径和名字,默认是prefix/logs/nginx.pid,安装之后也可以通过修改配置文件nginx.conf中的pid指令来修改路径
  • –error-log-path=path 设置错误日志文件error.log,当然你安装之后,也可以通过修改配置文件nginx.conferror_log指令来指定error.log的位置,默认是prefix/logs/error.log
  • –http-log-path=path 设置HTTP访问日志的路径和名字,安装之后也可以通过修改nginx.conf配置文件中的access_log指令来修改位置,默认是prefix/logs/access.log
  • –build=name 设置一个可选的nginx构建名称
  • –user=name 设置一个无需授权即可被Worker进程使用的用户,默认是空,可是在nginx.conf配置文件中修改user指令指定用户
  • –with-select_module或–without-select_module 允许或者禁止服务器以select()的方式工作,如果你的系统平台不支持其他合适的方式比如kqueueepoll或者/dev/poll,这个模块将会自动内置。
  • –with-poll_module或者–without-poll_module 启用或者禁用服务器以poll()方式工作,如果你的系统平台不支持其他合适的方式比如kqueueepoll或者/dev/poll,这个模块将会自动内置。
  • –without-http_rewrite_module 禁用重写模块,默认是开启的,需要PCRE正则库的支持。
  • –without-http_proxy_module 禁用HTTP代理模块
  • –with-http_ssl_module 开启支持HTTPS协议支持,默认是不开启的,需要OpenSSL库的支持。
  • –with-pcre=path 指定PCRE库的源文件的路径,使用的正则表达式的location指令和HTTP重写模块需要此支持
  • –with-pcre-jit 使用JIT的方式来构建PCRE库
  • –with-zlib=path 设置zlib库路径,默认开启并自动搜索,nginx开启gzip功能需要此库

更多的配置请参照官方文档,以下是官方给的范例:

1
2
3
4
5
6
7
./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=../pcre-8.40
--with-zlib=../zlib-1.2.11

如果执行正常,没有报错,则执行编译安装:

1
[root@f2c03e85f3aa nginx-1.12.0]# make && make install

安装完成之后,可以到安装目录下查看是否生成了二进制文件:

1
2
3
4
5
6
[root@f2c03e85f3aa nginx-1.12.0]# cd /usr/local/nginx/
[root@f2c03e85f3aa nginx]# ls
conf html logs sbin
[root@f2c03e85f3aa nginx]# cd sbin/
[root@f2c03e85f3aa sbin]# ls
nginx

我们可以看到在sbin二进制目录中已经有一个nginx可执行二进制文件,让我们来启动它!

1
2
3
4
5
[root@f2c03e85f3aa sbin]# ./nginx
[root@f2c03e85f3aa sbin]# ps aux | grep nginx
root 8208 0.0 0.0 20532 392 ? Ss 02:24 0:00 nginx: master process ./nginx
nobody 8209 0.0 0.1 20976 2284 ? S 02:24 0:00 nginx: worker process
root 8211 0.0 0.0 6448 580 ? S+ 02:24 0:00 grep nginx

通过ps查看进程,nginx确实已经启动了:一个Master进程和一个Worker进程!

最后,像之前yum安装之后测试一样使用w3m访问nginx默认页面,当然,如果你能用浏览器访问的到是最好的。

1
2
3
4
5
6
7
8
9
10
[root@f2c03e85f3aa sbin]# w3m 127.0.0.1
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.

完全没问题,成功!

可能你会发编译安装后的结构目录和yum安装的目录不一样,是的,这里安装之后的nginx的相关文件都在安装目录/usr/local/nginx之中,但你可以通过configure步骤来指定相关文件的存放位置,你是可以自定义的,更多的细节需要您主动去官方寻找答案,这里只是抛砖引玉。

文档译本归档仓库

总结

本文介绍了Nginx是什么并且简要地记录了在Windows和Linux(CentOS)坏境下安装Nginx的步骤和注意事项,接下来的Nginx系列文章将对Nginx方方面面展开描述,也是笔者对Nginx学习过程中所得收获的总结吧,希望能帮到大家。Nginx系列将长期针对基础,还没有涉及到反向代理、负载均衡和集群搭建等层面。