作者: Chris Dean, April 5, 2018
什么是Nginx?
Nginx 于2004年发布,并迅速成为 Apache Web服务器的替代品. 与Apache的流程驱动(process-driven)设计相比,它的事件驱动(event-driven) 设计能够更好的利用当今计算机的硬件。
因此,Nginx通常被认为是比Apache更“高性能”的选择,它能以更少的资源处理更大的并发负载。
Apache和Nginx之间已经有许多的比较,这次我们不关心社区的争论,不过到底是选择Apache还是Nginx,有这么几个关键点:
Apache或Nginx真的适合你吗?
如果符合以下场景,Nginx或许是更好的选择。
- 服务器上部署了高流量的站点
- 具备技术能力去设置和调整Nginx的高级配置
- 希望使用新的Web开发框架
- 希望使用像WSGI这样的CGI/FastCGI替代品
- 能适应更少的附件(add-ons)、组件、模块
- 能适应更复杂的配置
如果符合以下场景,可以继续使用Apache。
- 还在使用传统的Mysql/PHP应用,例如:WordPress、Drupal
- 计划代理多个不同配置的站点,每个站点通过.htacess来配置
- 喜欢更有名气、有完整文档的平台
- 希望使用多种不同的模块、附件、组件
- 希望Web服务器能够开箱即用且稳定运行
值得借鉴的经验是:如果你想使用高级配置运行单个高流量站点,Nginx更为合适;如果你想使用简单灵活的配置部署多个站点,那么Apache依然是你的菜。
总而言之,对于大多数站点来说,Nginx和Apache都是不错的选择。Apache内置在各主流Linux系统中而且只需要少量的配置,但同时很多测试也表明Nginx性能更好。至于到底怎么选,这取决于你打算用它来做什么。
安装前的准备工作
开始之前,请你先确认以下事项:
- 一台CentOS服务器:如果你在开发一个轻量级项目或刚开始使用,推荐你首先了解下GoDaddy VPS 计划。如果你准备深入学习,Dedicated server 计划更适合你。
- 一个域名:当然,我们需要将一个域名绑定到Nginx服务器。文中例子将使用yourdomain.com这个域名,实际使用时你需要把它替换成你自己的域名。
- SSH工具:需要一个可以连接到服务器的SSH客户端工具,例如:PuTTY、PowerShell(Windows)、Terminal(Mac)。如果这一步你觉得很难,由于文本大多数操作都是通过命令行,因此本文可能不太适合你。
- 搜索能力:Nginx有许多可定制的特性,本文不会全部提及,你可以根据自己的需求去检索。搜索引擎是个好帮手。
如果以上条件都具备,那咱就开始吧!
安装步骤
第一步:连接到服务器
通过SSH工具连接到服务器,再切换到root用户.
sudo su -
[可选]安装nano文本编辑器
如果你不是VIM的粉丝,你会发现nano编辑器使用更加简单。nano需要你进行手动安装:
yum install nano
第二步:禁用Apache
现主流Linux服务器会内置Apache,和Windows内置IIS类似。
虽然我们为Nginx分配了专用空间,但残留的Apache配置依然可能影响Nginx的运行。因此需要禁用Apache,确保重启之后Apache不会跟着自动启动。
停止Apache. 注意:该操作将中断所有与Apache的连接
service httpd stop
现在,禁用Apache. 禁用之后Apache将不再开机启动
systemctl disable httpd
第三步:安装Nginx
现在我们已禁用了Apache,可以开始安装Nginx.
首先,需要安装CentOS EPEL包
yum install epel-release
安装Nginx
yum -y install nginx
启动Nginx
service nginx start
你可能遇到nginx.conf “test failed”的错误信息?
你可能正在处理IP地址问题,Nginx默认会监听IPv4和IPv6,如果你的服务器不支持IPv6,将会出现以上情况。
可以修改配置文件/etc/nginx/nginx.conf
解决该问题:
注释以下配置
listen [::]:80 default_server;
注释后为:
# listen [::]:80 default_server;
保存文件并重启Nginx
service nginx start
如果你在安装过程中未遇到任何问题,请继续。
配置Nginx开机启动
systemctl enable nginx
此时,通过访问机器的IP地址你将看到Nginx的测试页面。
第四步:让Nginx代理你的域名
好了,我们已成功的从Apache切换到了Nginx,现在继续配置你自己的域名。
创建一个新的网站根目录
如果需要代理多个Web站点,最好遵循标准的命名规定。
我们将遵守cPanel,mk所使用的标准,通过public_html作为我们的网站根目录,如下所示:
mkdir -p /var/www/yourdomain.com/public_html
在该目录下创建一个index.html页面,便于我们后续的测试:
nano /var/www/yourdomain.com/public_html/index.html
在文件中添加一个简单行即可:
Hello World!
为了外部能够正常访问,我们需要配置文件夹权限:
chmod 755 /var/www/yourdomain.com/public_html
现在,文件夹已设置好,可以访问index.html来进行测试。
第五步:让Nginx识别server blocks
我们可以通过Apache的虚拟主机(Virtual Hosts)在一台机器上代理多个Web站点,通过这种路由指令将域名指向服务器上特定的目录。
Nginx通过”server blocks”路由方式替换了Apache的虚拟主机方式,这两种方式十分类似,只是配置文件不同。
首先,配置server blocks的目录:
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
提示:我们也可以不创建上述目录结构,变更下Nginx的全局配置文件(nginx.conf)即可. 然而,如果需要添加多个站点,以目录树的方式(基于Debian的Linux系统都会这样处理,如:Ubuntu)会更加方便配置。
现在,在nginx.conf中进行配置,让Nginx可以识别我们为server blocks创建的目录
nano /etc/nginx/nginx.conf
将下面的行添加到 http{} 部分的后面:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
现在,Nginx已经可以识别server blocks了。
在server blocks下为yourdomain.com站点创建一个新的文件:
nano /etc/nginx/sites-available/yourdomain.com.conf
我们将在文件中创建一个新的Nginx block:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
root /var/www/yourdomain.com/public_html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
让我们了解下server block的几个重要组成部分:
- server_name:这是你将使用的域名,相比localhost,我们一般使用公共域名和www版本的域名,如下:
server_name yourdomain.com www.yourdomain.com;
- root:站点文件的根目录
root /var/www/yourdomain.com/public_html;
- try_files:这句的意义是当访问的文件不存在时,让服务器返回404错误
try_files $uri $uri/ =404;
通过这些参数来创建你的server block,现在保存该文件。
在sites-available和sites-enabled之间创建一个软连接
ln -s /etc/nginx/sites-available/yourdomain.com.conf /etc/nginx/sites-enabled/yourdomain.com.conf
最后,重启Nginx.
service nginx restart
搞定! 通过DNS或hosts文件指向你的域名,你就可以在浏览器中通过域名访问我们刚创建的测试HTML文件了。
结语
恭喜,现在你已经在CentOs 7上成功运行Nginx了!
你成功的禁用了服务器上的Apache,使用了更棒的Nginx Web服务器,现在你可以自由部署你的站点了。
另外,Nginx有许多高级配置用于性能优化。如果需要其他配置,推荐你重新阅读Nginx的官方文档。