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并列。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351