摸着手教你快速入门Nginx

Nginx快速入门

1.Nginx 初识

Nginx 是一个高性能的 Http 和反向代理服务器,也是一个 IMUP、POP3、SMTP 之类的邮件代理服务器

(一)正向代理与反向代理

正向代理:客户端通过 client 设置,使用代理服务器 proxy 去访问远程服务器 server。

client - proxy - server

使用场景:

  • 可以访问原来无法访问的资源
  • 做缓存使用,加快访问速度
  • 对客户端授权或者记录访问信息等

反向代理:服务器通过代理服务接受连接请求,然后再转发给内部网络的服务器,将服务器的结果返回值客户端

使用场景:

  • 保证内网的安全,阻止 web 攻击
  • 负载均衡,优化网站的处理能力

(二)Hello Nginx

程序启动后进程 id 存放于 nginx.pid,可以用命令 cat nginx.pid来查看

关闭方式: ./nginx -s stop

杀死进程:kill -9/TERM/QUIT 进程号 (分别代表强制、快速、平缓)

信号处理命令:./nginx -s +(stop 、quit、reopen、reload)

2.Nginx配置

分为三部分 全局块、events块、http块

(一)全局块

全局指令、指定运行时的用户组、进程id存放位置、日志存放位置、worker process数量

# 配置用户或者用户组
#user nobody;
# 支持的并发数量
worker_processes  1;
# 配置日志路径 debug | info | notice | warn |error | crit |alert |emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

(二)events块

影响 nginx 服务器和用户网络连接的配置,比如每个进程的最大连接数,选取哪种时间驱动模型,以及在网络连接过程是否开启多个、序列化

# 每个进程的最大连接数
events {
    worker_connections  1024;
}

(三)HTTP块

配置代理、缓存、日志等绝大部分功能的地方,可以嵌套多个 sever 块,不通的 快对应不同的域名(虚拟主机)

1)虚拟主机

同一台 nginx 服务器可以支持多个网站的运行,每个虚拟主机之间都相互独立,具有完整功能

http{
  #对应虚拟主机配置
  server{
  	#端口
  	listen  80;
  	#域名
  	server_name localhost;
  	#文件
  	location /{
  		# 相对路径
  		root html;
  	}
  }
}
2)日志配置

通过日志可以获取用户的地址信息、跳转来源、终端、以及 url 访问量

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
		配置日志文件地址  声明日志格式
    #access_log  logs/access.log  main;
名字用途
Remote_addr客户端的ip地址
remote_user客户端的用户名称
Time_local访问的时间和时区
Request请求方法
status相应状态码
body_bytes-sent主题内容字节数
http_referer记录访问来源
http_user_agent用户使用的代理
http_x_forwarded_for通过代理服务器记录客户端ip

可以通过脚本实现日志切割

3)反向代理

jdk 路径:/usr/local/java。 tomcat 路径:/usr/local/tomcat

**需求:**要实现一台服务器多个 tomcat 的设置转发,需要拷贝一个 tomcat 安装目录,修改 server.xml 的三个端口

# ~后为url后置内容
location ~/tomcat1/ {
 #表示代理转发的地址
 proxy_pass   http://www.baidu.com
}
4)负载均衡

早期使用 DNS (域名解析系统做负载),具体而言,给客户端解析不同的 ip 让流量直接到达服务器。

形如: 客户端 (n) – 负载均衡器 --调度算法-- 服务端(n)

优点:

  • 用过健康检查,可以避免单点故障
  • 当发现节点故障时,从集群中移除,保证应用的高可用

四层的负载均衡,在 OSI 模型的传输层,主要是转发

七层的负载均衡,在 OSI 模型的应用层,主要是代理

负载均衡可以处理 HTTP、HTTPS、TCP、UDP

负载均衡的调度算法:

1)轮询:相当于循环遍历服务器

2)最小连接:每次优先选择服务器连接最少的服务器,适用于会话时间较长的业务处理

3)ip 映射:根据请求的 ip 地址进行散列,让同一 ip 下的请求,都映射到同一服务器上,可以解决 session 问题(粘性会话)

# 轮询

# 此块 位于 http 
upstream myserver {
  server 192.168.1.20:8080 weight 1; # 权重 默认值是 1
  server 192.168.1.20:8080;
}

# 此块位于 http -> server 块
server{
  location /{
    # 将请求映射到负载均衡器中
    proxy_pass http://myserver;
  }
}

如果需要根据 IP 地址 固定 server 处理,可以使用 ip_hash

upstream myserver {
  server 192.168.1.20:8080 weight 1; # 权重 默认值是 1
  server 192.168.1.20:8080;
  ip_hash;
}
5)动静分离

将动态请求和静态请求区分,不能简单地认为动态页面和静态页面的物理分离

如果是静态资源请求,直接查找 nginx 上的静态资源地址

如果是静态资源地址,通过反向代理,映射到 tomcat 路径下的资源

实现方式:

  • 单独把静态文件放在独立的服务器及独立域名下(推荐)
  • 动态和静态资源混合,通过 nginx 分开
# 动态资源的请求转发
location ~.*.jsp$ {
 # 负载均衡
 proxy_pass http://myserver
}
# 静态
location ~.*\.(gif|jpg|...)$ {
 root /usr/local/nginx/images;
 expires 3d;   # 在浏览器端使用缓存 设置过期时间
}
6)location 块

匹配规则:

  1. location = /uri 精确匹配
  2. location ^~/uri 前缀匹配,顺序在正则之前
  3. location~pattern 区分大小写的正则。 location~*pattern 不区分大小写的正则
  4. location /uri 前缀匹配 在正则以后
  5. location / 通用匹配。接受未匹配到的其他 location 请求

前缀匹配是按照指令长度,从长到短的顺序进行匹配

正则匹配是按照配置文件的顺序进行匹配

注意:前缀匹配的俩种形式不能同时出现

7)URL重写

对 URL 的规范化处理,域名更换时的新旧跳转,一些额外的参数调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈自在-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值