Nginx反向代理 负载均衡 动静分离 虚拟主机配置

nginx配置文件组成

  • 全局块
从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令。
比如:worker_processes 1;worker_processes值越大,可以支持的并发处理量越多。
  • events块
events涉及的指令主要影响nginx服务器与用户的网络连接。
比如:worker_connections 1024; 支持的最大连接数。
  • http块
Nginx服务器配置中最频繁的部分
http块包括http全局块,server块

Nginx配置实例

  • 反向代理实例1
80、8080端口都需要对外开放
service {
    listen  80;
    service_name 192.168.17.129;
    
    location / {
        root html;
        proxy_pass http://127.0.0.1:8080; // 80端口转发到8080端口
        index index.html index.htm;
    }
}

访问192.168.17.129:80 时转发到8080端口
  • 反向代理实例2
实现效果:使用Ngix反向代理,根据访问的路径跳转到不同端口的服务中
service {
    listen  9001;
    service_name 192.168.17.129;
    
   location ~ /edu/ {
       proxy_pass http://127.0.0.1:8080;
   }
   
   location ~ /vod/ {
       proxy_pass http://127.0.0.1:8081;
   }
}

访问192.168.17.129:9001/edu/index.html 转发端口至8080
访问192.168.17.129:9001/vod/index.html 转发端口至8081

9001、8081、8080 端口都需要对外开放
  • location指令说明
该指令用于匹配URL。
语法:location [ = | ~ | ~* | ^~] url {
    
}

1. =:用于不含正则表达式的url前,要求请求字符串与url严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2. ~:用于表示url包含正则表达式,并且区分大小写。
3. ~*:用于表示url包含正则表达式,并且不区分大小写。
4. ^~:用于不含正则表达式的url前,要求nginx服务器找到标识url和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则url和请求字符串做匹配。

注意:如果url包含正则表达式,则必须要有~或者~*表示。

负载均衡

  • 配置实例
1.在http模块加上:(举例)
upstream www.myweb.com {
    server 127.0.0.1:9100 weight = 3;
    server 127.0.0.1:9200 weight = 1;
}

其中weight代表权重,用于后端服务器性能不均的情况下,访问比率约等于权重之比,权重越大访问机会越多。

upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器。

2.在server模块里添加:(举例)
location /myweb {
    proxy_pass http://www.myweb.com; 
}
注意:这里的www.myweb.com要和upstream后面配置的地址或者域名保持一致。
  • Nginx常用负载均衡策略(后端做负载均衡的服务器必须IP段保持一致)
1.轮询(默认)
每个请求轮流分配到不同的后端服务器,如果后端服务器down掉,将自动删除。

举例:
upstream 域名 {
    server 192.168.0.14;
    server 192.168.0.15;
}

2.权重
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况。

举例:
upstream 域名 {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=1;
}
该情况两个服务器的访问比例为3:1

3.ip_hash
也叫域名绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话session丢失的问题;

举例:
upstream 域名 {
    ip_hash;
    server 192.168.0.14;
    server 192.168.0.15;
}

4.最少连接
web请求会被转发到连接数最少的服务器上。

举例:
upstream 域名 {
    least_conn;
    server 192.168.0.14;
    server 192.168.0.15;
}
  • 负载均衡其他几个配置
upstream 域名 {
    server 192.168.0.14;
    server 192.168.0.15 backup;(其他所有的非backup机器down的时候,才会请求backup服务器,相当于是一个备用服务器)
}    

upstream 域名 {
    server 192.168.0.14;
    server 192.168.0.15 down;(down表示当前的server是down状态,不参与负载均衡)
}

动静分离

  • 静态代理
把所有静态资源的访问改为访问nginx,因为nginx更擅长于静态资源的处理,性能更好,效率更高。所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理。

nginx静态代理实现方式:
1.通过在nginx.conf配置文件中添加静态资源的location。

举例:
#当访问静态资源,则从linux服务器/var/www/static目录下获取
location ~ .*\.(js|css|html|htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    root /var/www/static;
}

其中:
~ :表示正则匹配,也就是说后面的内容可以是正则表达式。
第一个. :表示任意一个字符。
* :表示一个或多个字符。
\. :是转义字符,是后面这个点的转义字符。
| :表示或者
$ :表示结尾

2.通过在nginx.conf配置文件中配置静态资源所在目录实现。

举例:
location ~ .*/(css|js|img|images) {
    root /var/www/static;
}
我们将静态资源放入/var/www/static目录下,然后用户访问时由nginx返回这些静态资源。

虚拟主机

虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当作多个服务器来使用,从而可以配置多个网站。

Nginx提供虚拟主机功能,就是为了让我们不需要安装多个Nginx,就可以运行多个网站。

Nginx下,一个server标签就是一个虚拟主机。

Nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可。

举例:
1.基于域名的虚拟主机
基于域名的虚拟主机是最常见的一种虚拟主机

server {
    listen 80;
    server_name www.shop.com;
    location /myweb {
        proxy_pass http://www.shop.com
    }
}

 server {
    listen 80;
    server_name www.p2p.com;
    location /myweb {
        proxy_pass http://www.p2p.com
    }
}

2.基于端口的虚拟主机
基于端口的虚拟主机配置,使用端口来区分。
浏览器使用同一个域名+端口 或 同一个IP地址+端口访问

server {
    listen 8080;
    server_name www.myweb.com;
    location /myweb {
        proxy_pass http://www.myweb.com;
    }
}

  server {
    listen 9090;
    server_name www.myweb.com;
    location /p2p {
        proxy_pass http://www.p2p.com;
    }
}

配置多个虚拟主机方式:

方式一:就是在nginx.conf文件中添加多个server

方式2:通过include的方式引入虚拟主机配置

include /usr/local/nginx/conf/vhost/vhost.conf;
将虚拟目录的配置文件加入到“http {}”部分的末尾,与其他server并列。

你可能感兴趣的:(Nginx反向代理 负载均衡 动静分离 虚拟主机配置)