网站升级通知,广州网站排名,门户类网站,网站搭建费用计入什么科目1. nginx 简介
nginx性能比apache强#xff0c;体现 在io模型方面
76
Pv#xff1a;
UV : 不同浏览器是不同的UV
GET 获取
POST 上传
HEAT 只看头 访问网站的流程 1.dns解析
2.cdn
3.tcp
4.web服务器 处理
建立连接
接收请求
处理请求 GET POST等
获取资源
构…1. nginx 简介
nginx性能比apache强体现 在io模型方面
76
Pv
UV : 不同浏览器是不同的UV
GET 获取
POST 上传
HEAT 只看头 访问网站的流程 1.dns解析
2.cdn
3.tcp
4.web服务器 处理
建立连接
接收请求
处理请求 GET POST等
获取资源
构建响应报文
发送响应报文
记录日志
5 浏览器接收响应报文进行页面渲染
http请求报文
http响应报文
nginx如何优化
要优化 Nginx 的性能和效率可以考虑以下几个方面的优化措施 调整工作进程和连接数 调整 Nginx 的工作进程数根据服务器的 CPU 核心数和负载情况进行合理的设置。调整 Nginx 的最大连接数限制确保与实际需求相匹配。 合理配置缓存 针对静态资源如图片、样式表、JavaScript 等使用 Nginx 的内置缓存来加速访问。配置适当的缓存时间和缓存规则以减少对后端服务器的请求。 优化 SSL/TLS 使用更高效的 SSL/TLS 版本并配置适当的密码套件以确保安全性和性能的折中。考虑使用缓存 SSL/TLS 会话以减少握手的开销。 开启 Gzip 压缩 配置 Nginx 开启 Gzip 压缩减小传输的数据量提高响应速度。可以根据不同的文件类型选择合适的压缩级别和压缩算法。 负载均衡和反向代理 使用 Nginx 的负载均衡功能将请求分发到多个后端服务器提高系统的吞吐量和可用性。使用 Nginx 的反向代理功能将请求代理到不同的后端服务器实现请求的路由和负载均衡。 配置文件优化 优化 Nginx 配置文件确保配置项的正确性和一致性。避免不必要的模块加载只加载需要的模块和功能。使用 include 文件来组织和管理配置项提高可维护性。 监测和日志优化 启用 Nginx 的访问日志和错误日志进行监测和故障排查。使用日志切割来管理日志文件的大小和数量避免过大的日志文件影响性能。
需要注意的是优化策略和步骤可能因环境和实际需求而有所不同。建议根据实际情况进行针对性的优化并进行性能测试和监测以评估优化效果和调整进一步优化的策略。
请求的流程
描述 1.客户发起情况到服务器网卡 2.服务器网卡接受到请求后转交给内核处理 3.内核根据请求对应的套接字将请求交给工作在用户空间的Web服务器进程 4.Web服务器进程根据用户请求向内核进行系统调用申请获取相应资源如index.html 5.内核发现web服务器进程请求的是一个存放在硬盘上的资源因此通过驱动程序连接磁盘 6.内核调度磁盘获取需要的资源 7.内核将资源存放在自己的缓冲区中并通知Web服务器进程 8.Web服务器进程通过系统调用取得资源并将其复制到进程自己的缓冲区中 9.Web服务器进程形成响应通过系统调用再次发给内核以响应用户请求 10.内核将响应发送至网卡 11.网卡发送响应给用户 这就是整个web请求的全过程。这个过程涉及到2个IO一个就是客户端请求的网络I/O另一个就是Web服务器请求资源的磁盘I/O
服务器发送请求到达服务器网卡 缓冲区》
一个常见的 Web 请求过程可以分为以下几个步骤 用户在浏览器中输入 URL统一资源定位符并按下回车键。 浏览器解析 URL提取出主机名如www.example.com和资源路径如/index.html。 浏览器首先会查询本地缓存看是否有之前请求过的相同资源的副本。如果有且未过期浏览器会直接从缓存中获取资源跳过后续步骤。 如果缓存中没有相应的资源或资源已过期浏览器会通过 DNS域名系统解析获取主机的 IP 地址。DNS 解析将域名转换为 IP 地址以便浏览器能够与服务器建立连接。 浏览器使用获取到的 IP 地址与服务器建立 TCP传输控制协议连接。TCP 提供可靠的、面向连接的数据传输。 一旦建立 TCP 连接浏览器会发送 HTTP超文本传输协议请求到服务器。请求中包含请求方法如 GET、POST、请求头包含一些元数据、请求路径等信息。 服务器接收到请求后根据请求路径找到对应的资源并进行处理。这可能涉及到业务逻辑的处理、数据库查询等。 服务器将处理完的资源以 HTTP 响应的形式返回给浏览器。响应中包含状态码用于表示请求的成功或失败、响应头包含一些元数据、响应体包含实际的响应内容等信息。 浏览器接收到响应后会根据响应的内容类型进行相应的处理。比如如果响应是 HTML 页面浏览器会解析 HTML 并渲染页面如果响应是图片浏览器会显示该图片。 浏览器将解析完的资源进行展示用户可以在浏览器中看到相应的内容。同时浏览器还会将响应内容保存到缓存中以便下次请求同样的资源时可以直接从缓存中获取提高性能。
以上是一个常规的 Web 请求过程不同的应用场景和技术可能会有所不同但基本的流程是相似的。
HTTP超文本传输协议中的首部字段是用于在请求和响应消息中传递元数据和其他相关信息的一种机制。以下是HTTP中常见的首部字段 通用首部字段 Cache-Control控制缓存行为。Connection控制连接的行为。Date日期和时间。Upgrade要求服务器升级到不同的协议。Via中间代理服务器的信息。 请求首部字段 Accept指定客户端可以接受的内容类型。Accept-Encoding指定客户端可以接受的内容编码方式。Content-Type请求中发送的实体的媒体类型。User-Agent客户端的用户代理标识。 响应首部字段 Content-Length返回的实体主体的长度以字节为单位。Content-Encoding指定响应实体使用的编码方式。Content-Type响应实体的媒体类型。Server服务器的软件名称和版本号。Set-Cookie设置一个或多个Cookie。 实体首部字段 Content-Length实体主体的长度以字节为单位。Content-Encoding实体主体的编码方式。Content-Type实体主体的媒体类型。
还有许多其他的首部字段用于传递不同的信息。每个首部字段都有其特定的作用和语义用于帮助客户端和服务器之间进行正确的通信和处理请求或响应。
curl -v www.baidu.com HTTP/1.1 302 Moved Temporarily #302 临时重定向 Server: openresty Date: Fri, 08 Sep 2023 14:10:10 GMT #表示服务器生成响应的日期和时间以协调世界时UTC表示。 Content-Type: text/html #响应主体的媒体类型这里的值是 “text/html”表示返回的内容是 HTML 文档 Content-Length: 142 #表示响应主体的长度以字节为单位这里的值是 142。 Connection: keep-alive #指示服务器是否要求客户端保持持久连接在此示例中服务器要求客户端维持持久连接。 Location: https://www.oppo.com/ Request-Id: 64fb2b421cfe0cfcf891adbc83ce4faa #用于标识请求的唯一编号或标识符 X-IP-Source: 4cb2b356b598ca96d5297afa558bd372 #指示客户端的 IP 地址或来源 Access-Control-Allow-Origin: * #用于指示服务器所允许的跨域请求的来源。在这个示例中服务器允许所有来源的跨域请求。 strict-transport-security: max-age31536000 #用于指示服务器所允许的跨域请求的来源。在这个示例中服务器允许所有来源的跨域请求。
网络IO
同步你去问
异步主动通知你
阻塞影响干别的事
异步: 不影响
I/O 多路复用
windows不支持epoll
nginx为什么性能好
epoll模型MMAP
支持0复制
Nginx之所以具有良好的性能主要有以下几个原因 异步非阻塞模型Nginx采用了事件驱动的异步非阻塞架构通过使用少量的线程即可处理大量并发连接。这种设计方式使得Nginx在高并发场景下能够高效地处理请求提高了系统的吞吐量。 轻量级Nginx是一个轻量级的服务器软件具有很小的内存占用和CPU消耗。它的代码精简功能模块化只包含了核心的功能减少了不必要的资源开销提高了性能。 出色的内存管理Nginx使用了高效的内存管理机制能够快速分配和释放内存有效地降低了内存碎片化的问题并提高了内存的利用率。 高度可定制性Nginx提供了丰富的配置选项可以根据具体需求进行灵活的配置和定制。用户可以根据自己的需求选择合适的模块和功能避免了不必要的开销提高了性能。
综上所述Nginx通过其异步非阻塞的架构、轻量级设计、高效的内存管理和可定制性等特点使得其具有优秀的性能表现。
nginx缓存功能
主进程指派工作
2. nginx安装
编译安装
#yum -y install gcc pcre-devel openssl-devel zlib-devel make
wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -xf nginx-1.24.0.tar.gz
cd nginx-1.24.0/
useradd -s /sbin/nologin nginx
cd /apps/nginx-1.24.0
./configure --help
./configure --prefix/apps/nginx --usernginx --groupnginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
make make install
chown -R nginx.nginx /apps/nginx
nginx没有线程
nginx 平滑升级
yum安装升级
模拟用户访问
dd if/dev/zero of1.img bs1M count100
wget --limit-rate100 http://192.168.1.150/1.img
nginx1.18 -nginx 1.24
1.nginx -V 查看参数
rootubuntu20:/apps/nginx-1.24.0# nginx -V nginx version: nginx/1.18.0 (Ubuntu) built with OpenSSL 1.1.1f 31 Mar 2020 TLS SNI support enabled configure arguments: --with-cc-opt‘-g -O2 -fdebug-prefix-map/build/nginx-lUTckl/nginx-1.18.0. -fstack-protector-strong -Wformat -Werrorformat-security -fPIC -Wdate-time -D_FORTIFY_SOURCE2’ --with-ld-opt‘-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC’ --prefix/usr/share/nginx --conf-path/etc/nginx/nginx.conf --http-log-path/var/log/nginx/access.log --error-log-path/var/log/nginx/error.log --lock-path/var/lock/nginx.lock --pid-path/run/nginx.pid --modules-path/usr/lib/nginx/modules --http-client-body-temp-path/var/lib/nginx/body --http-fastcgi-temp-path/var/lib/nginx/fastcgi --http-proxy-temp-path/var/lib/nginx/proxy --http-scgi-temp-path/var/lib/nginx/scgi --http-uwsgi-temp-path/var/lib/nginx/uwsgi --with-debug --with-compat --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_moduledynamic --with-http_sub_module --with-http_xslt_moduledynamic --with-streamdynamic --with-stream_ssl_module --with-maildynamic --with-mail_ssl_module
2.下载包解压,
./configure 带上nginx -V 查询到的参数
uubuntu20.04./configure: error: the HTTP XSLT module requires the libxml2/libxslt libraries. You can either do not enable the module or install the libraries.
安装sudo apt update sudo apt install libxml2-dev libxslt-dev
nginx ./configure: error: the HTTP image filter module requires the GD library. You can either do not enable the module or install the libraries.
安装 sudo apt update sudo apt install libgd-dev
3.编译
make
生成的二进制文件在objs目录
rootubuntu20:/apps/nginx-1.24.0/objs# ll nginx -rwxr-xr-x 1 root root 8083408 Sep 9 12:33 nginx*
4.备份的二进制文件
rootubuntu20:/apps/nginx-1.24.0/objs# which nginx /usr/sbin/nginx
cp /usr/sbin/nginx{,.bak}
untu20:/usr/sbin# cd rootubuntu20:~# \cp /apps/nginx-1.24.0/objs/nginx /usr/sbin/nginx cp: cannot create regular file ‘/usr/sbin/nginx’: Text file busy
强制替换rootubuntu20:~# \cp -f /apps/nginx-1.24.0/objs/nginx /usr/sbin/nginx
5.测试升级的nginx是否兼容出现ok才能升级我这里是测试
rootubuntu20:~# /usr/sbin/nginx -t nginx: [emerg] module “/usr/share/nginx/modules/ngx_http_image_filter_module.so” version 1018000 instead of 1024000 in /etc/nginx/modules-enabled/50-mod-http-image-filter.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed
这个原因是因为以前nginx modules 和现在官方的modules 不匹配需要我们先将旧的modules 卸载安装新版官方的modules
安装官方源
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring导入密钥
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg /dev/null配置稳定版本的源
echo deb [signed-by/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu lsb_release -cs nginx \| sudo tee /etc/apt/sources.list.d/nginx.list优先选择nginx官方的包。而不是系统源的包
echo -e Package: *\nPin: origin nginx.org\nPin: release onginx\nPin-Priority: 900\n \| sudo tee /etc/apt/preferences.d/99nginx更新
sudo apt update查看源中所有nginx的模块可用看到之前是libnginx-mod .1.24版本是nginx-mod
apt remove lib-nginx-mod* #卸载旧的nginx模块
apt install nginx-mod* #安装1.24版本的nginx模块
/usr/sbin/nginx -t 测试ok
rootubuntu20:~# //usr/sbin/nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
升级后访问zabbix 网站 502 Bad Gateway
可能是nginx 版本和zabbix不匹配的原因
源码安装平滑升级
升级要经过充分的测试
nginx版本与业务是否匹配
编译注意不要make install
备份nginx
拷贝新的nginx文件
cp -f /apps/nginx-1.25.2/objs/nginx /apps/nginx/sbin/
测试
[rootrocky8 logs]# /apps/nginx/sbin/nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
nginx -t 测试通过后发送usr2信号
kill -USR2 cat /apps/nginx/logs/nginx.pid #会生成新进程旧版本主进程PID的文件重命名为nginx.pid.oldbin并启动新的nginx
[rootrocky8 logs]# cat /apps/nginx/logs/nginx.pid.oldbin 25094 [rootrocky8 logs]# cat /apps/nginx/logs/nginx.pid 25329
向旧的进程发送which信号 它会逐步关闭旗下的工作进程主进程不退出这时所有请求都会由新版Nginx处理
kill -WINCH cat /apps/nginx/logs/nginx.pid.oldbin
退出老的进程
kill -QUIT cat /apps/nginx/logs/nginx.pid.oldbin
项目标题 nginx平滑升级
1.项目背景版本过旧添加新模块
2.项目目标
3.项目实现过程原理、步骤
4.项目结果
nginx配置文件
worker_processes auto; 自动匹配cpu核数
rootserver01:/etc/nginx# ps axo pid,cmd,psr |grep nginx
worker_cpu_affinity 0001 0010; 绑定cpu #防止缓存失效#将Nginx工作进程绑定到指定的CPU核心默认Nginx是不进行进程绑定的绑定并不是意味着当前nginx进程独占以一核心CPU但是可以保证此进程不会运行在其他核心上这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转减少了CPU对进程的资源分配与回收以及内存管理等因此可以有效的提升nginx服务器的性能。
nginx 的master 进程是root运行work进程是普通用户运行 因为nginx端口80是特权端口小于1023只能用root运行
worker_connections 2048 #所有worker进程能打开的文件数量上限,包括:Nginx的所有连接例
如与代理服务器的连接等而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级
别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致,
这是一些常见的 Nginx 配置指令用于设置代理请求的头部信息。
proxy_set_header Host $http_host; 设置代理请求的 Host 头部为客户端的请求 Host 头部值。proxy_set_header X-Real-IP $remote_addr; 设置代理请求的 X-Real-IP 头部为客户端的真实 IP 地址。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 设置代理请求的 X-Forwarded-For 头部将客户端的 IP 地址追加到该头部中以表明客户端的真实 IP 地址。proxy_set_header X-Forwarded-Proto $scheme; 设置代理请求的 X-Forwarded-Proto 头部为请求的协议HTTP 或 HTTPS。
这些配置指令通常用于反向代理服务器的配置用于将客户端请求转发给后端服务器并在请求头部中传递一些关键的信息。
好奇开心
sendfile on; 提示性能
#tcp_nopush on; #在开启了sendfile的情况下合并请求后统一发送给客户端,必须开启sendfile但会延迟 server_tokens off; 不显示版本 包含 nginx虚拟主机
vi /conf/nginx.conf
include /apps/nginx/conf/conf.d/*; #添加 rootserver01:/apps/nginx/conf/conf.d# cat www.luohw.org server { listen 8889; server_name www.luohw.org; root /apps/nginx/html/pc;
} rootserver01:/apps/nginx/conf/conf.d# cat m.luohw.org server { listen 8889; server_name m.luohw.org; root /apps/nginx/html/mobile;
}
配置文件在前的优先级高
server 块
alias和root的区别?
root是定义根的
location /about { #相当于访问/opt/pc/aaa/alias /opt/pc/aaa/;}location /about { #/opt/pc/aaa/about/root /opt/pc/aaa/;}server {listen 8889;server_name www.luohw.org;location / {root /apps/nginx/html/pc;}location /about {
root /opt/pc/aaa/;
}
curl www.luohw.org:8889/about222/ 访问 /opt/pc/aaa/about222/index.htmllocation /about/ {
root /opt/pc/aaa/;
}
curl www.luohw.org:8889/about222/ 访问/apps/nginx/html/pc/about222/index.htmllocation ^~ /about/ { 以什么开头
^~ 包含
^*
~* 包含不区分大小写
#匹配优先级从高到低
, ^~, /*, 不带符号
配置密码验证访问
htpasswd -cb /etc/nginx/conf.d/.nginx-user luo 123456 auth_basic login password;auth_basic_user_file /etc/nginx/conf.d/.nginx-user;指定密码访问
curl -I -u luo:123456 zabbix.luo.com
自定义错误页面
#访问不存在会报404就会访问 /data/html/40x.html
error_page 404 /40x.html;
location /40x.html {root /data/html/ ;}检测文件是否存在
location / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/index.html $uri/html /index.html; #访问url找不到就找$uri/index.html最后找index.html
}GET / HTTP/1.1 HOST: 192.168.1.150
下载文件配置 location /down {autoindex on;#自动索引功能alias /apps/nginx/html/mobile/luo;# autoindex_exact_size off;#计算文件确切大小单位bytes此为默认值,off只显示大概大小单位kb、mb、gbautoindex_localtime on;#上传一个包到nginx,太大会报413 rootserver01:/apps/nginx/conf/conf.d# curl -T /root/mysql-8.0.33-linux-glibc2.28-x86_64.tar.gz http://120.77.146.92:8889/down/
413 Request Entity Too Large 413 Request Entity Too Large nginx/1.24.0 上传文件太大
修改参数 client_max_body_size 1m; #设置允许客户端上传单个文件的最大值默认值为1m,上传文件超过此值会出413错误
高价值展示生活
安全感建立
具备信息交换
兴趣爱好工作职业
生活状态
T / HTTP/1.1 HOST: 192.168.1.150
# 下载文件配置 location /down {autoindex on;#自动索引功能alias /apps/nginx/html/mobile/luo;# autoindex_exact_size off;#计算文件确切大小单位bytes此为默认值,off只显示大概大小单位kb、mb、gbautoindex_localtime on;rootserver01:/apps/nginx/conf/conf.d# curl -T /root/mysql-8.0.33-linux-glibc2.28-x86_64.tar.gz http://120.77.146.92:8889/down/
413 Request Entity Too Large 413 Request Entity Too Large nginx/1.24.0 上传文件太大
client_max_body_size 1m; #设置允许客户端上传单个文件的最大值默认值为1m,上传文件超过此值会出413错误
nginx高级配置
高价值展示生活
安全感建立
具备信息交换
兴趣爱好工作职业
生活状态