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

563 阅读4分钟

一、Ngx处理用户请求

1、案例与思考

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

结果

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

image-20240303121340700

原因

IP访问:选择默认server文件

选择server默认,端口后加 default_server

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、客户收到文件内容,浏览器解析,进行展示

image-20240303121603986

二、虚拟主机

1、概述与分类

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

2、基于域名的虚拟主机

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

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

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

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

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

书写配置文件

[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

[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 修改请求头里面的内容.

image-20240303133917282

测试问题2:

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

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

image-20240303134847668

测试问题3:

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

3、基于端口的虚拟主机

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

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内网访问

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
错误日志级别;:左到右,越来越粗糙. 记录信息的详细程度.
debug, info, notice, warn, error, crit, alert, oremerg.
error
notice
debug: 未来用于调试使用,短时间开启,网站访问量特别大不开

生产建议

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

在/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)
$statushttp状态码
$body_bytes_sent响应给客户的文件的大小,响应报文的主体大小(文件大小) 单位字节
$http_referer从哪里跳转,访问到这个网站的. 网站运营分析
$http_usr_agent客户端代理(浏览器)
$http_x_forwarded _forXFF头,负载中使用,记录用户真实的ip地址.
在/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;
}
}

image-20240303151024177

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

access_log说明
访问日志进行压缩gzip需要通过zcat/zless/zgrep查看
进行缓存buffer32k 先把日志写入到内存中,定期写入到磁盘
定义刷新时间flush=10s
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、编辑配置文件

[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刷新配置文件

[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、测试

[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

其他主机

image-20240303160704804

2、项目二:配置缓存expires

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

image-20240303161704613

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规则小结

image-20240303162935633

五、一个高清视频下载站

1、自动索引功能(列表站点目录的内容),首页文件不存在.

autoindex模块
autindex on;开启目录索引功能(显示站点目录下的文件的列表,首页文件不存在.)
autoindex_localtime on;显示本地时间
autoindex_exact_size off;是否显示精确的文件的大小。off表示以人类可读形式显示大小
server{
  listen 80;
  server_name videoshishu.com;
  root /app/code/video;
  error_log /etc/nginx/conf.d/vide.com/error.log notice;
  access_log /etc/nginx/conf.d/vide.com/access.log main;
  charset utf8;
  autoindex on;
  autoindex_localtime on;
  autoindex_exact_size off;
  location /{
  index index.html;
 }
}

2、增加一个svip目录,里面创建文件.

增加认证功能(用户名和密码).

auth_basic模块

auth_basic "请输入密码:";

auth_basic_user_file conf/htpasswd; #指定用户名,密码文件

yum install -y httpd-tools 
#创建文件
htpasswd -bc /etc/nginx/user shishu 1
​
#增加用户
htpasswd -b /etc/nginx/user wu 1
​
#修改权限
chmod 600 /etc/nginx/user
chown nginx.nginx /etc/ngi
location /svip/ {
  auth_basic "input password:";
  auth_basic_user_file /etc/nginx/user;
  }

3、增加统计功能

stub_status模块/指令,显示nginx服务的状态,用户访问的状态

  location /status {
  stub_status;
}

image-20240304032252449

ngx状态模块中的指标说明说明说明
Active connections当前已经建立的连接数(est)和等待数量体验:ngx并发
server accepts已经接收到客户端的连接总数
handled服务端已经处理的连接.
requests客户端发出请求的总数
reading正在读取的请求头连接数量
writing正在进行的响应的连接数量
waiting排队数量排队情况.
ab 压力测试功能
ab -n 9999999 -c 3 -H Host:videoshishu.com http://10.0.0.7/

4、模块小结

模块核心指令
目录索引模块autoindex on;
认证功能模块auth_basic_user_file /etc/nginx/user;
访问控制模块allow和deny
状态模块用于监控ngx连接情况,stub_status;
ngx核心模块Root,location,error_log,server_name,listen
ngx日志模块Access_log,log_format

官方文档:指南大全

六、动态网站架构-wordpress

开发书写了一个php代码发给我们部署下。

1.测试能否直接部署到nginx中?

2.需要什么服务,是什么原理?

3.准备服务并测试。

4.部署代码。

1、概述

网络架构说明与特点性能说明
静态网站网站仅仅包含:html,css样式,js脚本,图片,视频 ngx直接次处理的资源静态资源只需要web服务器即可:nginx,可以承受较高的访问量, 不支持动态的功能,注册,评论,静态网站功能单一浏览器端解析(客户端解析),服务端仅仅负责发送,
动态网站动态网站一般是通过开发语言实现 :java,php,python,Golang ...动态资源页面需要,服务器进行处理nginx+php/tomcat..+数据库处理后把结果返回给用户,动态请求需要服务端进行处理与解析,把结果给用户,

2、常见动态网站的架构

PHP:LNMP(LEMP), LAMP, WNMP/WAMP   (P  PHP,W  Windows,A Apache)
Java:LNMT(Tomcat,Jetty,Weblogic,Jboss)
Python:LNMP(Python,uwsgi)
Golang: LNMG(Golang)
C/C :LNM?........

Linux 系统

Nginx Web服务

MySQL/MariaDB 数据库

3、LNMP架构细节

LNMP处理动态请求流程概述

image-20240304120847677

1)数据库

执行以下命令,查看系统中是否已安装 MariaDB。

rpm -qa | grep -i mariadb

则表示已存在 MariaDB,为避免安装版本不同造成冲突,请执行以下命令移除已安装的 MariaDB。

yum -y remove 包名

执行以下命令,在 /etc/yum.repos.d/ 下创建 MariaDB.repo 文件。

vim /etc/yum.repos.d/MariaDB.repo

编辑 MariaDB.repo文件

# MariaDB 10.4 CentOS repository list - created 2019-11-05 11:56 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = https://mirrors.cloud.tencent.com/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.cloud.tencent.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

安装调试

yum install -y mariadb-server
#mariadb-server 服务端
#mariadb 客户端
​
systemctl enable mariadb
systemctl start mariadb
#检查
ss -lntup |grep mysql
ps -ef |grep mysql
#仅仅刚安装的时候运行.仅首次 运行即可.
mysql_secure_installation 
#用于设置root密码,清理用户和清理临时库.Y

image-20240304101006618

报错指南:解决方案

Linux系统的root与数据库的root

1、2个独立的用户.

2、Linux的root用户用于进入和管理整个Linux系统.

3、数据库的root用户仅仅用于管理MySQL数据库.

 mysql -uroot -p1
查看系统所有的数据库.(熟练)
show databases;
查看库里的表(了解)
show tables from mysql;
显示mysql库的user表的user列和host列 (列 •字段),查看数据库的用户信息. (熟练)
select 字段1,字段2 from 库.表;
select user,host from mysql.user;
创建数据库(熟练)
create database shishu;
创建用户(会用,会改) 未来通过用户管理数据库.
#创建用户,进行授权
grant all on shishu.* to 'shishu'@'43.137.51.%' identified by '1';
grant 所有权限 on 数据库.* to '用户名'@'白名单'
#内网主机访问
[root@backup ~]# mysql -ushishu -p1 -h 10.0.0.12

数据库白名单说明: 白名单表示用户可以从哪里进行登录与使用数据库.

一般localhost表示只能在数据库本地使用.

可以通过172.16.1.% 进行授权局域网访问. 其他局域网机器可以访问数据库.

只给个%表示所有人可以访问(不安全). %不包含localhost.

删除数据库
drop database lidao;
删除用户
drop user 'lidao'@'172.16.1.%' ;
drop user 'lidao'@'localhost' ;

2)PHP

依次执行以下命令,更新 yum 中 PHP 的软件源。

rpm -Uvh https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

执行以下命令,安装 PHP 7.2 所需要的包。

yum -y install mod_php72w.x86_64 php72w-cli.x86_64 php72w-common.x86_64 php72w-mysqlnd php72w-fpm.x86_64

执行以下命令,启动 PHP-FPM 服务。设置 PHP-FPM 服务为开机自启动。

systemctl start php-fpm
systemctl enable php-fpm

查看端口和进程

[root@web01 ~]# ss -lntup |grep php
[root@web01 ~]# ps -ef |grep php
apache 9222 php-fpm: pool www
apache 9223 php-fpm: pool www
apache 9224 php-fpm: pool www
apache 9225 php-fpm: pool www
apache 9226 php-fpm: pool www

统一nginx与php用户,需要修改php配置文件

[root@nfs01 php-fpm.d]# egrep -n '^user|^group' /etc/php-fpm.d/www.conf
8:user = nginx
10:group = nginx

3)nginx

1、执行以下命令,在 /etc/yum.repos.d/ 下创建 nginx.repo 文件。

vi /etc/yum.repos.d/nginx.repo

2、按 i 切换至编辑模式,写入以下内容。

[nginx] 
name = nginx repo 
baseurl = https://nginx.org/packages/mainline/centos/7/$basearch/ 
gpgcheck = 0 
enabled = 1

3、按 Esc,输入 :wq,保存文件并返回。

4、 执行以下命令,安装 nginx。

yum install -y nginx

5、执行以下命令,打开并编辑 default.conf 文件。

server{
 listen 80;
 server_name blog.shishuwu.com;
 root /app/code/blog;
 
 location / {
 index index.php;
 }  
 
 location ~.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

6、赋予权限,重新加载

[root@nfs01 conf.d]# chown -R nginx.nginx /app/code/blog
[root@nfs01 conf.d]# systemctl reload nginx

7、下载wordpress并解压到指定目录

unzip wordpress-6.1.1.zip
mv wordpress/* /app/code/blog/

4)网站配置

image-20240307171618876

访问网站

image-20240307172751492