WEB集群-Ngx核心功能与必会模块

一、Ngx处理用户请求

1、案例与思考

案例01: 思考之前搭建的cxk.cn网站,使用域名访问或ip访问都是没有问题的.如果把配置文件名game.cxk.cn.conf使用域名或ip访问或怎么样?

结果

  • 域名访问网站没有任何问题
  • 使用ip访问则显示静态页面,另外一个网站了.

原因

IP访问:选择默认server文件

选择server默认,端口后加 default_server

arduino 复制代码
server {
    listen       80 default_server;

2、处理用户请求流程

1、DNS解析:域名->IP地址

2、连接80端口:tcp3次握手与网站的80端口建立连接

3、http请求豹纹:请求方法,URI,HOST等信息!

  • GET /index.html
  • H0ST: cxk.cn
  • User-Agent:Chrome/xxx

4、ngx处理

  • http请求,http区域处理
  • 不同的server{}区域(子配置文件)处理

    • 端口
    • 域名:用户请求的域名与子配置文件server_name进行匹配
    • 匹配成功,就让对应的子配置文件(server{})处理
    • 根据了配置文件的,root,location规则,index进行处理查找文件把找到的文件发回给用户

5、http响应报文:

  • 状态码:200 ok
  • server信息
  • 其他信息
  • 文件内容

6、客户收到文件内容,浏览器解析,进行展示

二、虚拟主机

1、概述与分类

虚拟机的分类 说明 应用场景
基于域名的虚拟主机 不同域名访问不同的站点 生产环境最常用的
基于端口的虚拟主机 不同端口访问不同的站点 保护,设置特殊端口.1024以上 8888 18888
基于ip的虚拟主机 不同ip访问不同的站点. 保护,用户只能通过某个ip连接进来. 用来限制网站只能通过指定的ip进行访问内网ip,vpn ip.

2、基于域名的虚拟主机

不同域名访问不同的主机.

案例02: 创建test.cn网站 站点目录/app/code/test/ 书写配置文件.

1.完成后不创建站点目录进行访问看看报什么错误.

2.创建站点目录后再访问看看报什么错误.

3.创建首页文件和内容,访问看看显示什么.

书写配置文件

ini 复制代码
[root@nanjing conf.d]# cat test.conf 
server{
  listen 80;
  server_name test.cn;
  root /app/code/test;
  location / {
  index index.html;
}
}

加载配置文件systemctl reload nginx

测试问题1:

完成后不创建站点目录进行访问看看报什么错误. 404

typescript 复制代码
[root@nanjing conf.d]# curl -v -H Host:test.cn http://43.137.51.152/index.html
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.25.4</center>
</body>
</html>

本地测试域名的小技巧(linux):节省修改本地Hosts

curl -v -H "Host: cxk.test.cn" http: 10.0.0.7/index.html

-H 修改请求头里面的内容.

测试问题2:

创建站点目录后再访问看看报什么错误.

403无首页文件,通常也表示权限拒绝!!!

测试问题3:

测试创建首页文件后访问。正常内容

3、基于端口的虚拟主机

不同的端口访问不的网站.

ini 复制代码
server{
  listen 81;
  server_name live.test.cn;
  root /app/code/live;
  location / {
  index index.html;
}
}
浏览器
http://10.0.0.7:81/index.html

4、基于ip的虚拟主机

搭建mimi网站,端口是8888,只能通过172.16.1.7内网访问

ini 复制代码
server{
  listen 172.16.1.7:8888;
  server_name mimi.cn;
  root /app/code/mimi;
  location / {
  index index.html;
}
}
浏览器
http://10.0.0.7:81/index.html

三、Ngx日志

1、概述

日志 使用建议 定义 使用
错误日志 发生故障的时候可以查看,4xx,5xx 通过错误级别指定 error_log
访问日志 记录用户什么时候访问,网站哪些页面,客户端信息 通过Log_format定义访问日志的格式 access_log

2、错误日志

error_log
格式:error_log 文件名 错误日志级别;
指令放在哪:main,http,mail,stream,server,location
lua 复制代码
错误日志级别;:左到右,越来越粗糙. 记录信息的详细程度.
debug, info, notice, warn, error, crit, alert, oremerg.
error
notice
debug: 未来用于调试使用,短时间开启,网站访问量特别大不开

生产建议

案例03:给每个虚拟主机指定自己独立的错误日志

ini 复制代码
在/etc/nginx/nginx.conf中注释#error_log  /var/log/nginx/error.log notice;
[root@nanjing conf.d]# cat cxk.conf 
server{
  listen 80;
  server_name cxk.cn;
  error_log /etc/nginx/conf.d/cxk.cn.log notice;
  root /app/code/cxk;
  location / {
  index index.html;
}
}

3、访问日志

辅助我们进行分析,网站访问量,ip,pv.

log_format 指定访问日志的格式
log_format 格式名称 格式.....;
放在那里:http
Ngx访问日志格式(ngx内置变量) 说明
$remote_addr 客户端IP
$remote_user 用户名(空,进行认证用户)
$remote_local 时间 30/Aug/2022:14:44:27 +0800
$requst 请求报文的起始行(请求方法 URI HTTP/1.1)
$status http状态码
$body_bytes_sent 响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节
$http_referer 从哪里跳转,访问到这个网站的. 网站运营分析
$http_usr_agent 客户端代理(浏览器)
$http_x_forwarded _for XFF头,负载中使用,记录用户真实的ip地址.
ini 复制代码
在/etc/nginx/nginx.conf中注释# access_log  /var/log/nginx/access.log  main;
[root@nanjing conf.d]# cat cxk.conf 
server{
  listen 80;
  server_name cxk.cn;
  error_log /etc/nginx/conf.d/cxk.cn.error.log notice;
  access_log /etc/nginx/conf.d/cxk.cn.access.log main;
  root /app/code/cxk;
  location / {
  index index.html;
}
}

访问日志其他选项access_log(了解,未来根据需要进行配置)

access_log 说明
访问日志进行压缩 gzip需要通过zcat/zless/zgrep查看
进行缓存 buffer32k 先把日志写入到内存中,定期写入到磁盘
定义刷新时间 flush=10s
ini 复制代码
access_log /var/log/nginx/cxk.cn.access.log main gzip buffer=32k  flush=10s;

四、location规则

URL处去域名就是URI

location匹配uri

1、项目一:限制访问管理页面

域名:buy.com

站点目录:/app/code/buy/

后台管理页面:/app/code/buy/admin/index.html

要求后台限制网段访问:43.137.51.0/24网段.

1、编辑配置文件

ini 复制代码
[root@nanjing conf.d]# cat buy.com.conf 
server{
  listen 80;
  server_name buy.com;
  root /app/code/buy;
  location / {
  index index.html;
 } 
  #buy.com/admin
  #uri:/admin/
  location /admin/{
  #允许43.137.51.0/24网段访问
  allow 43.137.51.0/24;
  #拒绝所有
  deny all;
 }
}

2、创建目录文件and刷新配置文件

typescript 复制代码
[root@nanjing conf.d]# mkdir -p /app/code/buy/admin
[root@nanjing conf.d]# echo "give me buy buy" > /app/code/buy/index.html
[root@nanjing conf.d]# echo "store manage" > /app/code/buy/admin/index.html
[root@nanjing conf.d]# nginx -t
[root@nanjing conf.d]# systemctl reload nginx

3、测试

arduino 复制代码
[root@nanjing conf.d]# curl -H Host:buy.com http://43.137.51.152:80 
give me buy buy
[root@nanjing conf.d]# curl -H Host:buy.com http://43.137.51.152:80/admin/index.html
store manage

其他主机

2、项目二:配置缓存expires

浏览器访问网站的缓存信息

ini 复制代码
server{
  listen 80;
  server_name buy.com;
  root /app/code/buy;
  location / {
  index index.html;
 } 
  #uri包含 .html或.js或.css 缓存1天 
  location ~* .(html|js|css)$ {
  expires max;
  #expires 1d;
 }
  #uri包含 .jpg 或 .jpeg 或 .png 或 .gif 或 .bmp 
  location ~* .(jpg|jpeg|png|gif|bmp)$ {
  expires 1h; 
 }
}

3、location规则小结

相关推荐
ajsbxi5 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
JustCouvrir1 天前
macOS|前端工程部署到Nginx服务器
服务器·前端·nginx
AlbertS1 天前
使用 Let’s Encrypt 获取免费SSL证书
nginx·免费·centos7·ssl证书·let’s encrypt
航月1 天前
FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
nginx·docker·mariadb
IT-民工211101 天前
nginx监控指标有哪些
运维·nginx
陌路物是人非2 天前
docker对nginx.conf进行修改后页面无变化或页面报错
nginx·docker
草明2 天前
Nginx 做反向代理,一个服务优先被使用,当无法提供服务时才使用其他的备用服务
运维·nginx·github
吉吉612 天前
Nginx:我自己的网站
运维·nginx
凉忆-2 天前
nginx安装ssl模块教程
运维·nginx·ssl
俎树振2 天前
树莓派上安装与配置 Nginx Web 服务器教程
服务器·前端·nginx