nginx
已经成为 web
开发者不可或缺的工具,虽然平时我们用到的服务器,运维都已经帮我们安装配置好了 nginx
,但作为开发人员,掌握如何搭建和配置服务器环境,能让我们的工作更加得心应手。
安装 nginx
nginx
安装方式有两种,一种是直接通过包管理工具(如:yum
或 apt-get
)安装,另一种方式是通过编译源码安装。这里我们选择自由度更高(当然也更麻烦)的编译源码安装。
首先是安装依赖:
nginx
安装前需要安装几个依赖:zlib
、 zlib-devel
、openssl
、openssl-devel
、pcre
和 pcre-devel
,大多数主机都默认安装了,如果没有安装的话,可以通过自带的包管理工具 yum
或 apt-get
安装。
这里我们下载 nginx-1.12.2
最新的稳定版本。
1 |
|
到此,安装就已经完成了,你可以到 /export/servers/nginx/
目录看到安装好的 nginx
的文件。
配置
nginx 自启动
安装完成过后,首先我们要配置的就是让 nginx
随系统自动启动:
1 |
|
注意:从 centos7 开始,开机时默认将不执行 /etc/rc.local,如果想要让它执行,必须更改该文件的权限
chmod +x /etc/rc.d/rc.local
。当然也可以通过增加 systemctl service 的方式来实现。
因为我们将 nginx
安装到了 /export/servers/nginx/
目录,所以每次要执行 nginx
命令都要写全路径。所以最好是建立一个 nginx
软链接到 /usr/local/bin/
目录:
1 |
|
这样,我们可以直接运行 nginx -s stop
或 nginx -s reload
来停止或者重启 nginx
了。
nginx 支持多网站多域名
支持多个网站,我们只需要在 nginx
配置文件增加 server
节点就可以实现。配置文件在安装目录中 /export/servers/nginx/conf/nginx.conf
(这就是为什么我喜欢指定nginx
的安装目录了,因为默认安装时各种文件会放在不同的目录中)。
1 |
|
在 server1.conf
文件中增加一个 server 节点配置 比如
1 |
|
如果我们的网站是 java
或者 nodejs
写的,那么我们就需要通过配置 nginx
代理将请求代理到我们的 java
或者 nodejs
服务了:
1 |
|
然后运行命令 nginx -s reload
重新加载一下 nginx
配置,配置就生效了。更多 nginx
的配置信息可以查看文档:http://nginx.org/en/docs/
nginx 日志按日期分割
nginx
可以为每一个 server
节点指定日志文件,但是久而久之,这个文件会越来越大。通常的处理方法是将日志文件按日期分割,并且定期删除旧的日志文件。
假设我们 nginx
日志文件目录结构如下:
1 |
|
首先来看如何将日志文件按日期分割:
创建一个 sh
文件:touch nginxLogRotate.sh
。文件内容如下:
1 |
|
将 nginxLogRotate.sh
添加执行权限:chmod +x nginxLogRotate.sh
,这样我们每运行一次这个文件就会分割一次日志文件。所以我们需要让服务器每天零时能够自动运行这个文件,以达到按天分割日志,并清除 7 天前旧文件的目的。
这时候我们需要用到 linux
的计划任务配置:cron
。windows
的定时计划任务我们很熟悉了,cron
也有类似的功能:指定某个时间执行特定的任务,这里我们需要让 cron
每天零时执行 nginxLogRotate.sh
这个文件。
cron
有个配置文件: /etc/crontab
,我们可以在这个配置文件里配置我们的任务:
1 |
|
让 nginx 支持 https
支持 https
也比较简单,主要包含两部分:签署第三方可信任的 SSL
证书 和 配置 HTTPS
,
我们在安装 nginx
的时候已经开启了 https
模块,所以只需要配置就行了,现在我们来看看如何签署第三方可信任的 SSL
证书。
第三方证书有很多机构可以提供,这里以 Let’s Encrypt 推荐的certbot 为例。
安装 certbot
certbot
依赖 python
,所以先确认您已经安装了 python
2.7 或者 3.4+。并且需要先安装 epel-release
(可以通过包管理工具安装)。
certbot
官方首页( https://certbot.eff.org/ )提供了如何在不同系统下安装 certbot
的教程,这里不做详细介绍。需要注意一点是,因为我们的 nginx
是自己编译安装的,所以我们在第一个下拉选项框里应该选择 None of the above
而不是 nginx
。
1 |
|
接下来配置 nginx 的 server1.conf 配置文件,然后重启 nginx
:nginx -s reload
。
1 |
|
自动续签证书
因为 Let's Encrypt
的证书只能免费使用 90 天,过期后必须运行命令 certbot renew
重新续签。为了省心,我们再次使用 linux
的计划任务配置 cron
。
1 |
|
以上就是关于如何安装 nginx
,如果配置 nginx
多网站多域名,以及支持 http
的过程,若本文有什么遗漏或者失误,会及时更新到本文。