Nginx是一款轻量级的网页服务器、反向代理服务器。相较于Apache、lighttpd具备占有内存少,稳定性高等优点。它最常的用途是提供反向代理服务。html
一、准备工做nginx
Nginx的安装依赖于如下三个包,意思就是在安装Nginx以前首先必须安装一下的三个包,注意安装顺序以下:正则表达式
1 SSL功能须要openssl库,直接经过yum安装: #yum install openssl算法
2 gzip模块须要zlib库,直接经过yum安装: #yum install zlib后端
3 rewrite模块须要pcre库,直接经过yum安装: #yum install pcrecentos
二、安装Nginx依赖项和Nginx浏览器
1 使用yum安装nginx须要包括Nginx的库,安装Nginx的库服务器
#rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm负载均衡
2 使用下面命令安装nginxtcp
#yum install nginx
3 启动Nginx
#service nginx start
三、直接浏览器访问localhost就会出现Nginx的欢迎界面表示你安装成功了,不然就是安装失败了
查看已开放的端口:firewall-cmd --list-ports
默认80端口加入防火墙访问白名单中:firewall-cmd --permanent --zone=public --add-port=80/tcp
使用firewall-cmd --reload命令使其生效,以后能够再查看下开放的端口。访问ip:80端口,以下则表示安装成功
四、配置Nginx
CentOS安装Nginx后,安装在了 /etc/nginx/目录下,你能够打开/etc/nginx/conf.d/default/conf查看里面的配置,包括监听端口,域名和nginx访问的根目录
以上安装方法nginx的配置文件位于
/usr/local/nginx/conf/nginx.conf
Nginx配置文件常见结构的从外到内依次是「http」「server」「location」等等,缺省的继承关系是从外到内,也就是说内层块会自动获取外层块的值做为缺省值。
接收请求的服务器须要将不一样的请求按规则转发到不一样的后端服务器上,在 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的文件都包含进去啦。
每一个 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后跟的指定目录是准确的,而且末尾必须加 /。
location /c/ { alias /a/; }
若是访问站点http://location/c访问的就是/a/目录下的站点信息。
root后跟的指定目录是上级目录,而且该上级目录下要含有和location后指定名称的同名目录才行。
location /c/ { root /a/; }
这时访问站点http://location/c访问的就是/a/c目录下的站点信息。
若是你须要将这个目录展开,在这个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 -t
或者
nginx -tc [nginx文件地址]