搬运至我原来的简书主页 https://www.jianshu.com/p/d51…
Nginx 是一款轻量级的网页服务器、反向代理服务器。相较于 Apache、lighttpd 具备占有内存少,稳定性低等劣势。它最常的用处是提供反向代理服务。
装置
在 Centos 下,yum 源不提供 nginx 的装置,能够通过切换 yum 源的办法获取装置。目前很多像 centos7 零碎曾经自带这几个库,所以装置前能够先查看一下本地是否曾经存在。存在可间接跳至第四步骤。须要应用安装包编译装置的,如下。以下命令均需 root 权限执行:
首先装置必要的库(nginx 中 gzip 模块须要 zlib 库,rewrite 模块须要 pcre 库,ssl 性能须要 openssl 库)。选定 /usr/local 为装置目录,以下具体版本号依据理论扭转。
1. 装置 PCRE 库
$ cd /usr/local/
$ sudo wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
$ sudo tar -zxvf pcre-8.36.tar.gz
$ cd pcre-8.36
$ sudo ./configure
$ sudo make
$ sudo make install
2. 装置 zlib 库
$ cd /usr/local/
$ sudo wget http://zlib.net/zlib-1.2.8.tar.gz
$ sudo tar -zxvf zlib-1.2.8.tar.gz
$ cd zlib-1.2.8
$ sudo ./configure
$ sudo make
$ sudo make install
3. 装置 ssl
$ cd /usr/local/
$ sudo wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
$ sudo tar -zxvf openssl-1.0.1j.tar.gz
$ sudo ./config
$ sudo make
$ sudo make install
4. 装置 nginx
$ cd /usr/local/
$ sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz
$ sudo tar -zxvf nginx-1.8.0.tar.gz
$ cd nginx-1.8.0
$ sudo ./configure --prefix=/usr/local/nginx #这一步须要按须要增加编译参数,如下
$ sudo make
$ sudo make install
如果是应用安装包编译的下面几个依赖,须要在在 –prefix 前面接以下命令:
--with-pcre=/usr/local/pcre-8.36 指的是 pcre-8.36 的源码门路。--with-zlib=/usr/local/zlib-1.2.8 指的是 zlib-1.2.8 的源码门路。
5. 启动
先测试一下配置文件是否正确:
$ /usr/local/nginx/sbin/nginx -t
无问题能够启动:
$ /usr/local/nginx/sbin/nginx
查看是否启动胜利:
关上浏览器拜访此机器的 IP,如果浏览器呈现 Welcome to nginx! 则示意 Nginx 曾经装置并运行胜利。
局部命令如下:
重启:
$ /usr/local/nginx/sbin/nginx –s reload
进行:
$ /usr/local/nginx/sbin/nginx –s stop
测试配置文件是否失常:
$ /usr/local/nginx/sbin/nginx –t
强制敞开:
$ pkill nginx
配置
以上装置办法 nginx 的配置文件位于
/usr/local/nginx/conf/nginx.conf
Nginx 配置文件常见构造的从外到内顺次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会主动获取外层块的值作为缺省值。
Server
接管申请的服务器须要将不同的申请按规定转发到不同的后端服务器上,在 nginx 中咱们能够通过构建虚拟主机(server)的概念来将这些不同的服务配置隔离。
server {
listen 80;
server_name localhost;
root html;
index index.html index.htm;
}
例如咱们笔戈玩下的两个子项目 passport 和 wan 就能够通过在 nginx 的配置文件中配置两个 server,servername 别离为 passport.bigertech.com 和 wan.bigertech.com。这样的话不同的 url 申请就会对应到 nginx 相应的设置,转发到不同的后端服务器上。
这里的 listen 指监听端口,server_name 用来指定 IP 或域名,多个域名对应对立规定能够空格离开,index 用于设定拜访的默认首页地址,root 指令用于指定虚拟主机的网页跟目录,这个中央能够是绝对地址也能够是相对地址。
通常状况下咱们能够在 nginx.conf 中配置多个 server,对不同的申请进行设置。就像这样:
server {
listen 80;
server_name host1;
root html;
index index.html index.htm;
}
server {
listen 80;
server_name host2;
root /data/www/html;
index index.html index.htm;
}
然而当 server 超过 2 个时,倡议将不同对虚拟主机的配置放在另一个文件中,而后通过在主配置文件 nginx.conf 加上 include 指令蕴含进来。更便于管理。
include vhosts/*.conf;
就能够把 vhosts 的文件都蕴含进去啦。
Localtion
每个 url 申请都会对应的一个服务,nginx 进行解决转发或者是本地的一个文件门路,或者是其余服务器的一个服务门路。而这个门路的匹配是通过 location 来进行的。咱们能够将 server 当做对应一个域名进行的配置,而 location 是在一个域名下对更精密的门路进行配置。
以下面的例子,能够将 root 和 index 指令放到一个 location 中,那么只有在匹配到这个 location 时才会拜访 root 后的内容:
location / {
root /data/www/host2;
index index.html index.htm;
}
location 匹配规定
~ 波浪线示意执行一个正则匹配,辨别大小写
~* 示意执行一个正则匹配,不辨别大小写
^~ ^~ 示意一般字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,个别用来匹配目录
= 进行一般字符准确匹配
匹配例子:
location = / {
# 只匹配 "/".
[configuration A]
}
location / {
# 匹配任何申请,因为所有申请都是以 "/" 开始
# 然而更长字符匹配或者正则表达式匹配会优先匹配
[configuration B]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的申请,并进行匹配 其它 location
[configuration C]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg 结尾的申请.
# 然而所有 /images/ 目录的申请将由 [Configuration C]解决.
[configuration D]
}
申请:
/ -> 合乎 configuration A
/documents/document.html -> 合乎 configuration B
/images/1.gif -> 合乎 configuration C
/documents/1.jpg -> 合乎 configuration D
动态文件映射
拜访文件的配置次要有 root 和 aliasp’s 两个指令。这两个指令的区别容易弄混:
alias
alias 后跟的指定目录是精确的,并且开端必须加 /。
location /c/ {alias /a/;}
如果拜访站点 http://location/ c 拜访的就是 /a…。
root
root 后跟的指定目录是下级目录,并且该下级目录下要含有和 location 后指定名称的同名目录才行。
location /c/ {root /a/;}
这时拜访站点 http://location/ c 拜访的就是 /a…。
如果你须要将这个目录开展,在这个 location 的开端加上「autoindex on;」就能够了
转发
配置起来很简略比方我要将所有的申请到转移到真正提供服务的一台机器的 8001 端口,只有这样:
location / {proxy_pass 172.16.1.1:8001;}
这样拜访 host 时,就都被转发到 172.16.1.1 的 8001 端口去了。
负载平衡
upstream myserver; {
ip_hash;
server 172.16.1.1:8001;
server 172.16.1.2:8002;
server 172.16.1.3;
server 172.16.1.4;
}
location / {proxy_pass http://myserver;}
咱们在 upstream 中指定了一组机器,并将这个组命名为 myserver,这样在 proxypass 中只有将申请转移到 myserver 这个 upstream 中咱们就实现了在四台机器的反向代理加负载平衡。其中的 ip_hash 指明了咱们平衡的形式是依照用户的 ip 地址进行调配。另外还有轮询、指定权重轮询、fair、url_hash 几种调度算法。
总结
以上是最简略的通过 nginx 实现动态文件转发、反向代理和负载平衡的配置。在 nginx 中所有的性能都是通过模块来实现的,比方当咱们配置 upstream 时是用 upstream 模块,而 server 和 location 是在 http core 模块,其余的还有流控的 limt 模块,邮件的 mail 模块,https 的 ssl 模块。他们的配置都是相似的能够再 nginx 的模块文档中找到具体的配置阐明。