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 | ├─conf # 配置文件存放目录 |
其实解压出来之后,我们就可以开始启动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 | [nginx] |
保存之后,执行yum安装命令:
1 | yum install -y nginx |
安装完之后,启动ninx服务
1 | [root@f2c03e85f3aa yum.repos.d]# service nginx start |
我是在docker容器中运行,之前没有配置暴露80端口,只暴露了6379端口,这次先不配置nginx端口,我直接在终端下用终端浏览器w3m访问nginx的80端口:
1 | [root@f2c03e85f3aa yum.repos.d]# w3m http://127.0.0.1 |
可以看到,终端下显示nginx的欢迎页面,成功了!
来看看install之后,系统中生成了跟nginx的文件有哪些:
1 | [root@f2c03e85f3aa /]# find / -name 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 | iptables -I INPUT 5 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT |
编译安装
与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 | [root@f2c03e85f3aa tools]# ls |
执行编译前检查依赖与配置,并且指定安装的路径为/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.conf
的error_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()
的方式工作,如果你的系统平台不支持其他合适的方式比如kqueue
、epoll
或者/dev/poll
,这个模块将会自动内置。 - –with-poll_module或者–without-poll_module 启用或者禁用服务器以
poll()
方式工作,如果你的系统平台不支持其他合适的方式比如kqueue
、epoll
或者/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 | ./configure |
如果执行正常,没有报错,则执行编译安装:
1 | [root@f2c03e85f3aa nginx-1.12.0]# make && make install |
安装完成之后,可以到安装目录下查看是否生成了二进制文件:
1 | [root@f2c03e85f3aa nginx-1.12.0]# cd /usr/local/nginx/ |
我们可以看到在sbin二进制目录中已经有一个nginx
可执行二进制文件,让我们来启动它!
1 | [root@f2c03e85f3aa sbin]# ./nginx |
通过ps查看进程,nginx确实已经启动了:一个Master进程和一个Worker进程!
最后,像之前yum安装之后测试一样使用w3m访问nginx默认页面,当然,如果你能用浏览器访问的到是最好的。
1 | [root@f2c03e85f3aa sbin]# w3m 127.0.0.1 |
完全没问题,成功!
可能你会发编译安装后的结构目录和yum安装的目录不一样,是的,这里安装之后的nginx的相关文件都在安装目录/usr/local/nginx
之中,但你可以通过configure
步骤来指定相关文件的存放位置,你是可以自定义的,更多的细节需要您主动去官方寻找答案,这里只是抛砖引玉。
文档译本归档仓库
总结
本文介绍了Nginx是什么并且简要地记录了在Windows和Linux(CentOS)坏境下安装Nginx的步骤和注意事项,接下来的Nginx系列文章将对Nginx方方面面展开描述,也是笔者对Nginx学习过程中所得收获的总结吧,希望能帮到大家。Nginx系列将长期针对基础,还没有涉及到反向代理、负载均衡和集群搭建等层面。