尚硅谷Nginx教程由浅入深--笔记
- Nginx简介
 - Nginx相关概念
 - 反向代理
 - 负载均衡
 - 动静分离
 
- Nginx安装
 - Nginx命令
 - Nginx配置
 - Nginx配置实例
 - 反向代理1
 - 反向代理2
 - 负载均衡
 - 动静分离
 
Nginx简介
Nginx是一个高性能的HTTP和反向代理服务器,特点是内存占用少,并发能力强。
Nginx相关概念
反向代理
- 正向代理
 
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问。
- 反向代理
 
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器就是一个服务器,暴露的是代理服务器的地址,隐藏了真是服务器的IP地址和端口。
负载均衡
- 负载均衡
 
负载均衡是将客服端的请求分发到多台服务器的方法
动静分离
- 动静分离
 
为了加快网站的解析速度,将网站的动态资源(jsp、servlet)和静态资源(html、css、js)分开。
Nginx安装
- 安装prce依赖
 
./configure
pcre-config --version
 
- 安装其他依赖
 
yum -y install zlib zlib-devel gcc-c++ libtool openssl openssl-devel
 
- 安装启动Nginx
 
yum install nginx
systemctl start nginx
systemctl enable nginx
 
默认安装位置/usr/local/nginx,启动方式:./nginx
- 防火墙
 
firewall-cmd --list-all
firewall-cmd --add-port=80/tcp permanent
firewall-cmd --reload
 
Nginx命令
命令路径/usr/local/nginx/sbin,可以先配置环境变量。
./nginx -v  # 查看版本号
./nginx  # 启动
./nginx -s stop  # 关闭
./nginx -s reload  # 重新加载
 
Nginx配置
配置文件路径:/usr/local/nginx/conf
-  
第一部分 全局快
配置整体运行的指令 -  
第二部分 events块
主要配置服务器的用户网络连接 -  
第三部分 http块
 
- http全局块
 - server块
 
Nginx配置实例
反向代理1
-  
实现效果
浏览器访问www.123.com,跳转到Linux系统的Tomcat页面 -  
准备工作
 
- 安装Tomcat,使用默认端口8080,并启动
 - 开放端口
 
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
 
- 具体配置
 
- 在Windows中的C:/Windows/System32/drivers/etc/hosts在中配置域名
 
...
192.168.1.100 www.123.com
 
- 在Nginx的配置文件/usr/local/nginx/conf/nginx.conf中配置,配置http块的server块。
 
server {
        listen       80;
        server_name  192.168.1.100;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }
 
- 测试,浏览器访问www.123.com,显示的是tomcat的页面,访问www.123.com:8080也可以显示tomcat页面,服务器端关闭了8080端口(firewall-cmd --remove-port 8080/tcp --permanent)后,只能通过80端口访问,无法通过8080端口访问。
 
反向代理2
- 实现效果
访问http://www.123.com:9001/edu/直接跳转到www.123.com:8080/edu/页面
访问http://www.123.com:9001/vod/直接跳转到www.123.com:8081/vod/页面 - 准备工作
 
- 准备两个tomcat服务器,一个8080端口,一个8081端口,开放8080,8081,9001端口
 - 创建测试页面
 
- 具体配置
 
- 在Nginx的配置文件/usr/local/nginx/conf/nginx.conf中配置,配置http块的server块。
 
server {
        listen  9001;
        server_name 192.168.1.100;
        location ~ /edu/ {
            proxy_pass http://127.0.0.1:8080;
        }
        location ~ /vod/ {
            proxy_pass http://127.0.0.1:8081;
        }
    }
 
- 测试
测试结果同实现效果 - location说明
location用户匹配URL,语法如下: 
location [ = | ~ | ~* | ^~ ] uri {
	...
}
 
1、=:用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示uri包含正则表达式,且区分大小写
3、~*:用于表示uri包含正则表达式,并且区分大小写
4、^~:用于不含正则表达式的uri前,要求Nginx服务器找到表示uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
负载均衡
- 实现效果
在浏览器中输入http://192.168.1.100/edu/a.html,负载均衡效果,平均到8080和8081端口中。 - 准备工作
 
- 准备两台tomcat服务器,一台8080端口,一台8081端口。
 - 在两台tomcat里面的webapps目录中,都创建名称是edu的文件夹,在edu文件夹中创建a.html文件,用于测试
 
- 实际配置
在http块中配置 
upstream mystream {
    server 192.168.1.100:8080;
    server 192.168.1.100:8081;
}
server {
	server_name 192.168.1.100;
	location / {
		proxy_pass http://mystream;
	}
}
 
- 负载均衡策略
 
- 轮询(默认):按照时间顺序逐一分配到后端服务器
 - weight:weight默认值为1,权重越高被分配的客户端越多
 
upstream mystream {
    server 192.168.1.100:8080 weight=5;
    server 192.168.1.100:8081 weight=10;
}
 
- ip_hash:每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session问题
 
upstream mystream {
	ip_hash;
    server 192.168.1.100:8080 ;
    server 192.168.1.100:8081 ;
}
 
- fair(第三方):按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
 
upstream mystream {
    server 192.168.1.100:8080 ;
    server 192.168.1.100:8081 ;
	fair;
}
 
注:fair是第三方的,因此需要安装模块,否则会有如下报错
nginx: [emerg] unknown directive “fair” in /usr/local/nginx/conf/nginx.conf:35
动静分离
-  
什么是动静分离
动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主力推崇的方案;另一种是动态跟静态文件混合发布,通过Nginx来分开。
通过location指定不同的后缀名称实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires定义:是给一个资源设定一个过期时间,也就是说无需去服务器端验证,直接通过浏览器自身确认是否过期即可所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),这里设置3d,表示在这3天之内访问这个URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。

 -  
准备工作
 
- 新建/data目录,下面再新建/data/www/目录和/data/images/目录,将pic-1.png复制到/data/images/目录,将a.html复制到/data/images目录。
 
- 实际配置
在/usr/local/nginx/conf/nginx.conf中配置如下: 
server {
	server_name 192.168.1.100;
	location /www/ {
		/data/;
	}
	location /images/ {     # 指定uri
		/data/;             # 指定路径
		autoindex on;       # 允许目录访问
	}
}
                



















