DNS域名解析

http://wwwhehuayu.com 转换ip和端口号DNS解析

默认80端口不需要写的。

域名只是为了能更好的帮助记忆ip地址。

域名转换成IP,端口号还是需要写的。

从host文件中找不到,就去外网访问

外网映射工具

把项目发布到外网(能让外网访问到本地)
场景:微信开发、第三方支付的时候,微信事件通知
natapp(拿到token,cmd命令行窗口进行映射,在natapp中输入相关的ip和端口)
ngrok(完全免费,稳定性不强)工具

nginx应用场景

http服务器 ###使用nginx做静态服务器、图片服务器
虚拟主机配置 将一台服务器,拆分成多个网站部署。
反向代理 使用反向代理隐藏真实的ip访问地址
负载均衡 减少单台服务器压力、故障转移(重试机制幂等性等问题、健康检查)
使用Nginx搭建API接口网关###解决网站跨域###
使用Nginx实现网站动静分离
使用Nginx实现防止DDOS(安全控制)

Nginx目录文件

conf:存放配置文件
html:存放静态文件
logs:存放日志文件
temp:存放临时文件
默认的访问的页面也是存在html目录下的

虚拟主机配置:

server_name:配置域名
#匹配所有的url地址
location / {
root:表示存放nginx根目录,默认html
index:默认首页
}

通过不同域名访问不同路径html

www.hhy.com
server {
listen 80;
server_name www.hhy.com;
location / {
root html/data/www; 注意不能加/,加/表示的是绝对路径
index index.html index.htm;
}
}
server {
listen 80;
server_name bbs.hhy.com;
location / {
root html/data/bbs;
index index.html index.htm;
}
}

通过不同端口号访问不同虚拟主机:

server {
listen 8081;
server_name www.hhy.com;
location / {
root html/data/www;
index index.html index.htm;
}

}
server {
listen 8080;
server_name www.hhy.com;
location / {
root html/data/bbs;
index index.html index.htm;
}
}

反向代理为什么是安全的?

利用抓包工具是看不到转发到地址,所以安全。

location正则匹配

以= 开头表示精确匹配

^~开头表示uri以某个常规字符串开头,不是正则匹配

~开头表示区分大小写的正则匹配

~*不区分大小写的正则匹配

~*开头表示不区分大小写的正则匹配

/通用匹配,如果没有其他匹配,任何请求都会匹配到

很实用,API设计,路由网关
根据域名相同,但是项目不同,跳转不同的真实服务器。
www.hehuayu.com/tomcat8080
www.hehuayu.com/tomcat8081

server{
##监听的端口号
listen 80
##服务名称
server_name www.hehuayu.com;
##匹配URI路径地址 /表示匹配所有路径 默认不区分大小写
location /tomcat_8080/ {
###配置反向代理
proxy_pass http://127.0.0.1:8080/;
index index.html index.htm
}
###匹配
location /tomcat_8081/ {
proxy_pass http://127.0.0.1:8081/;
index index.html index.htm
}
}

负载均衡

socket网络编程:物理层—>数据链路层—>网络层—>传输层—>会话层—>表示层—>应用层

1.什么是负载均衡?
解决高并发,负载均衡拦截到所有请求,在采用负载均衡算法分配到不同真实的服务器上。
四层负载均衡器:基于传输层,也叫做基于TCP协议实现负载均衡,LVS(软负载)和F5(硬件负载)
七层负载均衡器:基于应用层,也叫做基于http协议实现负载均衡

2.为什么用负载均衡?
减轻单节点的压力

3.负载均衡作用?
目的是解决高并发,将所有请求转发到负载均衡器,在所有负载均衡采用(负载均衡算法###轮询机制、权重、IP绑定)

upstream配置负载均衡

Upstream Server中文翻译 上游服务器
Upstream Server可以配置多个上游服务器(配置多个真实业务逻辑访问到的服务器)

nginx负载均衡 内置功能:故障转移、(重试机制、心跳检测)

重试机制可能会发生重复问题(注意幂等性)

心跳检测:tcp和http协议

什么是轮询机制:均匀分配访问
upstream backServer{
server 127.0.0.1:8080
server 127.0.0.1:8081
}

配置负载均衡案例

默认采用轮询
server{
listen 80;
server_name www.itmayiedu.com;
location / {
##使用反向代理指向backServer
proxy_pass http://backServer/;
index index.html index.htm
}
}

负载均衡常用算法

1.轮询机制(默认)
轮流访问,非常均匀,应用场景:服务器的配置都相同的情况下
2.权重机制 使用weight配置比例等分
比如1:3,权重越高,访问的次数就会越多,应用场景:服务器配置不相同的情况
upstream backServer{
server 127.0.0.1:8080 weight 1;
server 127.0.0.1:8081 weight 2;
}
3.Ip绑定
通过nginx或许ip地址hash运算固定分配到某个服务器上。ip绑定可以解决什么问题:session共享问题
upstream backServer{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
ip_hash;
}
4.fail(第三方)
比weight、ip hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能的进行负载均衡,也就是根据后台服务器的响应时间来分配请求,响应时间短的优先分配。nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream fair模块。
5.url绑定(第三方)

负载均衡故障转移:
当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务器,保证服务器的高可用。

server {
listen 80;
servername www.toov5.com;
location / {
### 指定上游服务器负载均衡服务器
proxy_pass http://backServer;
###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间
发起握手等候响应超时时间
proxy_connect_timeout 1s;
###nginx发送给上游服务器(真实访问的服务器)超时时间
proxy_send_timeout 1s;
### nginx接受上游服务器(真实访问的服务器)超时时间
proxy_read_timeout 1s;
index index.html index.htm;
}
}

nginx rewrite

Nginx提供的全局变量或自己设置的变量
$remote_addr 客户端的ip地址
$remote_port 客户端的端口


例如:禁止ip,访问可以直接通过提供的变量进行判断然后直接返回错误页面
也可以通过判断get,post请求方式
判断ip地址来源
##如果访问的ip地址为192.168.5.165,则返回403
if($remote_addr=192.168.5.165){
return 403;
}
限制浏览器访问
##不允许谷歌浏览器访问 如果是谷歌浏览器返回500
if($http_user_agent~Chrome){
return 500;
}

server{
listen 80;
server_name localhost;
if($remote_addr=192.168.5.165){ //判断不通过后面的location不会执行
return 403;
}
location /{
root html
index index.html index.htm;
}
}