陈同学
微服务
Accelerator
About
# 如何在CentOS 7上安装和配置Nginx > 作者: Chris Dean, April 5, 2018 > 翻译:[陈同学](https://chenyongjun.vip/) > 原文链接: [How to install and configure NGINX on CentOS 7](https://www.godaddy.com/garage/how-to-install-and-configure-nginx-on-centos-7/) > 备注:已省略作者的前言部分 ## 什么是Nginx? Nginx 于2004年发布,并迅速成为 Apache Web服务器的替代品. 与Apache的流程驱动(process-driven)设计相比,它的[事件驱动(event-driven)](https://www.thegeekstuff.com/2013/11/nginx-vs-apache/) 设计能够更好的利用当今计算机的硬件。 因此,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 计划](https://www.godaddy.com/hosting/vps-hosting?isc=cardigan)。如果你准备深入学习,[Dedicated server 计划](https://www.godaddy.com/hosting/dedicated-server?isc=cardigan)更适合你。 * **一个域名**:当然,我们需要将一个域名绑定到Nginx服务器。文中例子将使用yourdomain.com这个域名,实际使用时你需要把它替换成你自己的域名。 * **[SSH工具](https://www.godaddy.com/help/connect-to-your-server-or-shared-hosting-account-with-ssh-4943?locale=en)**:需要一个可以连接到服务器的SSH客户端工具,例如:PuTTY、PowerShell(Windows)、Terminal(Mac)。如果这一步你觉得很难,由于文本大多数操作都是通过命令行,因此本文可能不太适合你。 * **搜索能力**:Nginx有许多可定制的特性,本文不会全部提及,你可以根据自己的需求去检索。搜索引擎是个好帮手。 如果以上条件都具备,那咱就开始吧! ## 安装步骤 ### 第一步:连接到服务器 通过SSH工具连接到服务器,再切换到root用户. ```bash sudo su - ``` [可选]安装nano文本编辑器 如果你不是VIM的粉丝,你会发现nano编辑器使用更加简单。nano需要你进行手动安装: ```bash yum install nano ``` ### 第二步:禁用Apache 现主流Linux服务器会内置Apache,和Windows内置IIS类似。 虽然我们为Nginx分配了专用空间,但残留的Apache配置依然可能影响Nginx的运行。因此需要禁用Apache,确保重启之后Apache不会跟着自动启动。 **停止Apache. 注意:该操作将中断所有与Apache的连接** ```bash service httpd stop ``` **现在,禁用Apache. 禁用之后Apache将不再开机启动** ```bash systemctl disable httpd ``` ### 第三步:安装Nginx 现在我们已禁用了Apache,可以开始安装Nginx. **首先,需要安装CentOS EPEL包** ```bash yum install epel-release ``` **安装Nginx** ```bash yum -y install nginx ``` **启动Nginx** ```bash 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 ```shell service nginx start ``` 如果你在安装过程中未遇到任何问题,请继续。 **配置Nginx开机启动** ```shell systemctl enable nginx ``` 此时,通过访问机器的IP地址你将看到Nginx的测试页面。 ### 第四步:让Nginx代理你的域名 好了,我们已成功的从Apache切换到了Nginx,现在继续配置你自己的域名。 **创建一个新的网站根目录** 如果需要代理多个Web站点,最好遵循标准的命名规定。 我们将遵守cPanel,mk所使用的标准,通过public_html作为我们的网站根目录,如下所示: ```shell mkdir -p /var/www/yourdomain.com/public_html ``` 在该目录下创建一个index.html页面,便于我们后续的测试: ```shell nano /var/www/yourdomain.com/public_html/index.html ``` 在文件中添加一个简单行即可: ``` Hello World! ``` 为了外部能够正常访问,我们需要配置文件夹权限: ```shell chmod 755 /var/www/yourdomain.com/public_html ``` 现在,文件夹已设置好,可以访问index.html来进行测试。 ### 第五步:让Nginx识别server blocks 我们可以通过Apache的虚拟主机(Virtual Hosts)在一台机器上代理多个Web站点,通过这种路由指令将域名指向服务器上特定的目录。 Nginx通过"server blocks"路由方式替换了Apache的虚拟主机方式,这两种方式十分类似,只是配置文件不同。 **首先,配置server blocks的目录:** ```shell 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. ```shell service nginx restart ``` **搞定!** 通过DNS或hosts文件指向你的域名,你就可以在浏览器中通过域名访问我们刚创建的测试HTML文件了。 ## 结语 恭喜,现在你已经在CentOs 7上成功运行Nginx了! 你成功的禁用了服务器上的Apache,使用了更棒的Nginx Web服务器,现在你可以自由部署你的站点了。 另外,Nginx有许多高级配置用于性能优化。如果需要其他配置,推荐你重新阅读Nginx的[官方文档](https://nginx.org/en/docs/)。
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
如何在CentOS 7上安装和配置Nginx
文章链接:
https://chenyongjun.vip/articles/25
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力