网站建设功能报,wordpress最新编辑器怎么还原,深圳网络建设有限公司,种子在线资源搜索神器一、nginx介绍Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样#xff0c;都是web服务器软件#xff0c;因为其性能优异#xff0c;所以被广大运维喜欢。又因…一、nginx介绍Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样都是web服务器软件因为其性能优异所以被广大运维喜欢。又因为nginx是一个轻量级的web服务器相比apache来说资源消耗更低。nginx官网http://nginx.org/nginx与apache的比较Nginx适合处理静态页面,apache处理动态页面Web服务器NginxApache反向代理非常好 Rewrite规则非常好好系统压力比较很小小内存消耗非常小很大静态文件处理非常好一般稳定性非常好好安全性一般好技术资料很少非常多虚拟主机支持支持热部署支持不支持FastCGI好差二、nginx部署安装部署下载nginx源码包wget http://nginx.org/download/nginx-1.19.3.tar.gz -P /usr/src安装依赖包yum -y install gcc pcre-devel zlib-devel openssl-dev- gcc: 源码编译工具- pcre-devel nginx url_rewrite 功能提供包支持nginx的正则表达- zlib-devel nginx 压缩功能提供包- openssl-dev安全网络功能解压nginx源码包tar xf nginx-1.19.3.tar.gz
cd nginx-1.19.3/配置nginx源码./configure --prefix/usr/local/nginx配置目的1检查环境是否满足安装条件依赖解决2指定安装方式配置文件、命令文、各种文件放哪里3开启模块功能【内置模块 三方模块】4指定软件安装在那里编绎源码make安装make install相关目录—安装目录/usr/local/nginx/—主配置文件conf/nginx.conf—网页目录html—日志文件logs—启动脚本sbin/nginx—模块目录modules—进程目录pidnginx启动管理配置文件测试/usr/local/nginx/sbin/nginx -t启动/usr/local/nginx/sbin/nginx 停止/usr/local/nginx/sbin/nginx -s stop关闭/usr/local/nginx/sbin/nginx -s quit 【优雅关闭在退出前完成已经接受的连接请求】关闭killall -s QUIT nginx加载/usr/local/nginx/sbin/nginx -s reload 【重新加载配置文件】2.启动测试nginx安装完毕接下来就可以启动nginx了nginx启动后如何测试nginx的启动状态呢可以通过以下三种方式去测试这个可以根据自己的习惯选择一种测试就行了。使用netstat命令查看启动端口 netstat -ntpl使用losf命令查看启动端口lsof -i :80使用文本浏览器访问nignx默认网站elinks http://192.168.65.213.编辑服务脚本 vim /usr/lib/systemd/system/nginx.service [Unit]
Descriptionnginx - web server
Afternetwork.target remote-fs.target nss-lookup.target[Service]
Typeforking
PIDFile/usr/local/nginx/logs/nginx.pid
ExecStartPre/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload/usr/local/nginx/sbin/nginx -s reload
ExecStop/usr/local/nginx/sbin/nginx -s stop
ExecQuit/usr/local/nginx/sbin/nginx -s quit
PrivateTmptrue[Install]
WantedBymulti-user.target重新加载系统服务systemctl daemon-reload 启动服务systemctl start nginx开机自启systemctl enable nginx.service三、nginx配置最基本配置worker_processes 1; # 默认为1表示开户一个业务进程
events { # 事件驱动模块worker_connections 1024; # 单个业务进程可接受连接数
}
http {include mime.types; # 引入http mime类型default_type application/octet-stream;# 如果mime类型没匹配上默认使用二进制流的方式传输sendfile on; # 使用linux的sendfilesocket,file,len高效网络传输也就是数据0拷贝。未开户senfilekeepalive_timeout 65; # 保持连接配置server { # 虚拟主机 listen 80; # 监听的端口号server_name localhost; # 主机名、域名location / { # location是匹配用户输入的路径urlroot html; # 默认存放网页的目录路径index index.html index.htm; # 默认网页}error_page 500 502 503 504 /50x.html; # 发生错误展示的页面location /50x.html {root html;}}
}nginx默认配置文件大概分为几个区域没有被 {} 包裹的部分为全局配置—如worker_processes 1; 设置工作进程子进程数为 1 events {} 为 nginx 连接配置的模块—如worker_connections 1024; 设置每一个子进程最大允许连 接 1024 个连接http {} 为 nginxhttp 核心配置模块 —而 http {} 中还有 server {}以及 server {} 中的 location {}server {} 为虚拟主机配置模块包括监听端口、监听域名、IP等内容 —在一个 Nginx 的配置文件里面我们是可以指定多个 Sever 区块的配置的。 location {} URI 匹配—细分到针对不同的路径和请求而进行的配置。一个站点中 URI 通常会很多在 Location 区块设置可以写多个 Location 的配置的。虚拟主机原本一台服务器只能对应一个站点通过虚拟主机技术可以虚拟化成多个站点同时对外提供服务。2.1、域名解析、端口监听基于域名的虚拟主机实现两个基于域名的虚拟主机可以在server_name匹配多个域名基于端口的虚拟主机实现两个基于端口的虚拟主机可以listen监听多个端口http框架是定义与nginx网站相关的配置server虚拟主机listen端口server_name主机可以填IP或域名location网页地址http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server { # 第一个虚拟主机 listen 80; # 端口 server_name www.s.com; # 主机、域名location / {root /www/www;index index.html index.htm;}}server { # 第二个虚拟主机listen 88; # 端口server_name vod.s.com; # 主机、域名location / {root /www/vod;index index.html index.htm;}}ServerName匹配规则ServerName匹配是从上往下的顺序前面匹配成功了就不会向下匹配了。完整匹配可以在同一个servername中匹配多个域名server_name vod.s.com vod1.s.com;通配符匹配server_name *.s.com; # *通配符匹配*.s.com域名匹配同一个网页通配符结束匹配server_name vod.*; # *通配符匹配不管vod.*域名访问都是同一个网页正则匹配比较适用于二级域名系统符合哪些规则就进入到对应的server里面进行转发。server_name ~^[0-9]\.s\.com$;2.2、location相同类型的表达式字符串长的会优先匹配按优先级排列① 类型② ^~类型表达式③ 正则表达式 ~和 ~* 类型④常规字符串匹配类型按前缀匹配⑤ 通用匹配/如果没有其他匹配任何请求都会匹配到location优先级规则①匹配某个具体文件(location完整路径) (location ~ 完整路径) (location ~ *完整路径) (location~完整路径) (location完整路径) (location /)②用目录做匹配访问某个文件(location目录) (location ^ ~ 目录/) (location ~ 目录 ) (location~*目录) (location目录) (location /)反向代理正向代理搭建一个属于自己的代理服务器①用户发送请求到自己的代理服务器②自己的代理服务器发送请求到服务器③服务器将数据返回到自己的代理服务器④自己的代理服务器再将数据返回给用户反向代理七层代理调度作用该功能可以通过组建后台集群提高网站性能①用户发送请求到服务器访问的其实是反向代理服务器但用户不知道②反向代理服务器发送请求到真正的服务器③真正的服务器将数据返回给反向代理服务器④反向代理服务器再将数据返回给用户3.1、代理服务器proxy_passlocation模块内配置和网页目录同级别定义的服务器列表,可以填写域名、IP。不支持代理https服务器location / {proxy_pass http://www.baidu.com; # 请求转向baiduproxy_pass和root目录二选一
}集群代理upstreamhttp模块内配置模块内的server是服务器列表和server模块同级别。proxy_pass调用集群在location模块内配置和upstream集群名保持一致。 upstream jiangying { # 创建集群定义代理的服务器列表server 192.168.65.22:80; # 是IP、端口、状态的配置server 192.168.65.10:80;}server {listen 80;server_name localhost;location / {proxy_pass http://jiangying; # 请求转向到jiangying定义的服务器列表 }error_page 500 502 503 504 /50x.html;location /50x.html {root html;}}3.2、UpStream3.2.1、上游服务器UpStream工作流程proxy_pass 向上游服务器请求数据共有6个阶段 - 初始化- 与上游服务器建立连接- 向上游服务器发送请求- 处理响应头- 处理响应体- 结束配置说明参 数作 用案 例 set_header设置headerproxy_connect_timeout与上游服务器连接超时时间、快速失败proxy_send_timeout定义nginx向后端服务发送请求的间隔时间(不是耗时)。默认60秒超过这个时间会关闭连接proxy_read_timeout后端服务给nginx响应的时间规定时间内后端服务没有给nginx响应连接会被关闭nginx返回504 Gateway Time-out。默认60秒proxy_requset_buffering缓冲区是否完全读到请求体之后再向上游服务器发送请求on打开off关闭proxy_buffering是否缓冲上游服务器数据on打开off关闭proxy_buffers缓冲区大小 32个128k大小内存缓冲块proxy_buffers 32 128k;proxy_buffer_sizeheader缓冲区大小proxy_buffer_size 64k;proxy_busy_buffers_sizeproxy_max_temp_file_size临时文件最大值proxy_max_temp_file_size 1024m;proxy_temp_file_write_size当启用从代理服务器到临时文件的响应的缓冲时一次限制写入临时文件的数据的大小。默认情况下大小由proxy_buffer_size和proxy_buffers指令设置的两个缓冲区限制。临时文件的最大大小由proxy_max_temp_file_size指令设置。 3.2.1、负载均衡策略轮询 最基本的配置方法它是upstream模块默认的负载均衡默认策略。每个请求会按时间顺序逐一分配到不同的后端服务器。在轮询中如果服务器down掉了会自动剔除该服务器。此策略适合服务器配置相当无状态且短平快的服务使用。weight权重方式在轮询策略的基础上指定轮询的几率。权重越高分配到需要处理的请求越多此策略可以与least_conn和ip_hash结合使用适合服务器的硬件配置差别比较大的情况。upstream jiangying {
server 192.168.65.22:80 weight8;
server 192.168.65.10:80 weight2;
}down标记服务器永久停机了。upstream jiangying {
server 192.168.65.22:80 down;
server 192.168.65.10:80;
}backup标记该服务器为备用服务器。当主服务器停止时请求会被发送到它这里。upstream jiangying {
server 192.168.65.22:80;
server 192.168.65.10:80 backup;
}健康检查max_fails允许失败的次数fail_timeout与max_fails结合使用。检查失败后需要等30s再重新连接fail_time失败后暂停服务的时间服务器会被认为停机的时间长度,默认为10s。upstream jiangying {
server 192.168.65.22:80;
server 192.168.65.10:80 max_fails2 fail_timeout30;
}3.2.3、least_conn 最少连接访问。轮询算法是把请求平均的转发给各个后端使它们的负载大致相同但是有些请求占用的时间很长会导致其所在的后端负载较高。这种情况下least_conn这种方式就可以达到更好的负载均衡效果。此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。 upstream jiangying {least_conn;server 192.168.65.22:80;server 192.168.65.10:80;}3.2.4、第三方策略 第三方的负载均衡策略的实现需要安装第三方插件。fair根据后端服务器响应时间来分配请求响应时间短的优先分配。url_hash按访问url的hash结果来分配请求使每个url定向到同一个后端服务器要配合缓存命中来使用。同一个资源多次请求可能会到达不同的服务器上导致不必要的多次下载缓存命中率不高以及一些资源时间的浪费。而使用url_hash可以使得同一个url也就是同一个资源请求会到达同一台服务器一旦缓存住了资源再此收到请求就可以从缓存中读取。 总结以上便是6种负载均衡策略的实现方式其中除了轮询和轮询权重外都是Nginx根据不同的算法实现的。在实际运用中需要根据不同的场景选择性运用大都是多种策略结合使用以达到实际需求。3.4、四层代理其他业务集群nginx四层代理TCP/UDP高度nginx从1.9版本才开始支持该功能模块查询./configure --help配置四层代理模块--with-stream./configure --with-stream
make make installhttp之外配置集群stream { # 四层代理模块
upstream backend { # 创建集群
server 192.168.65.22:22;
server 192.168.65.10:22;
}server {
listen 12345;
proxy_pass backend; # 调用集群
}
}验证远程业务可以轮询登录到后方集群的服务器ssh 192.168.65.21 -p 12345动静分离因nginx的静态处理能力很强但动态处理能力不足所以在企业中常采用动静分离技术针对PHP将静态页面交给nginx处理动态页面交给PHP-FPM模块或Apache处理。在nginx的配置文件中是通过location配置段配合正则匹配来实现静态与动态页面的不同处理方式。在企业信息化应用环境中服务器的安全性和响应速度需要根据实际情况进行相应参数配置以达到最优的用户体验。默认的nginx安装参数只能供最基本的服务还需要调整如网页缓存时间连接超时网页压缩等相应参数餐能发挥出服务器的最大作用。4.1、动静分离原理Nginx动静分离概述Nginx的静态处理能力很强但是动态处理能力不足因此在企业中常用动静分离技术针对PHP的动静分离静态页面交给 Nginx处理动态页面交给 PHP-FPM模块或 Apache处理在 Nginx的配置中是通过 ocation配置段配合正则匹配实现静态与动态页面的不同处理方式Nginx实现动静分离配置我们根据需要将配置Nginx实现动静分离对php页面的请求转发给LAMP或LNMP处理而静态页面交给Nginx处理从而实现动静分离。部署 LNMP环境任务要求— 安装Linux操作系统、Nginx网站服务、Mysql数据库、PhP 编写动态网站的语言工具pythen也可以环— 境启动Nginx、MySQL、PHP服务— 测试Nginx及MySQL、PHP是否工作正常 LNMP常见问题Nginx的默认访问日志文件为/usr/local/nginx/logs/access.logNginx的默认错误日志文件为/usr/local/nginx/logs/error.logPHP默认错误日志文件为/var/log/php-fpm/www-error.log4.2、动静分离部署LNMP4.2.1、环境配置安装相关软件软件仓库没有mysql安装mariadbyum -y install mariadb mariadb-server mariadb-devel php php-mysql php-fpm动态网站创建需要安装的软件mariadb数据库包mariadb-server客户端数据库包mariadb-devel数据库的依赖包开发环境软件包phpFastCGI开发语言解释器php-fpm关联nginx与php的服务php-mysql关联php与数据库的服务启动服务systemctl start php-fpm
systemctl start mariadb修改Nginx配置文件并启动服务vim /usr/local/nginx/conf/nginx.confserver {listen 80;server_name localhost;location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf;}}注~ \.php$~是开启正则表达式\转义作用匹配.php结尾的文件动态网页设置fastCGI快速公共网关接口可以连接网站程序nginx到网站的语言解释器如phpphp-fpm为fastCGI的管理者。fastcgi.conffastcgi_params改成fastcgi.conf更改扩展名称安装php-fpm生成的文件要比原有文件可靠。4.2.2、案例1php网页配置查看php-fpm配置文件vim /etc/php-fpm.d/www.conf
[www]
listen 127.0.0.1:9000 # PHP端口号
listen.allowed_clients 127.0.0.1
group apache
pm dynamic
pm.max_children 50 # 最大进程数量
pm.start_servers 5 # 最小进程数量
pm.min_spare_servers 5
pm.max_spare_servers 35
slowlog /var/log/php-fpm/www-slow.log
php_admin_value[error_log] /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] on
php_value[session.save_handler] files
php_value[session.save_path] /var/lib/php/session创建PHP页面vim /usr/local/nginx/html/test.php
html
body
This is HTML message
/br
?php
$c 12;
$d 2;
if($c $d){echo c is bigger;}
else{ echo d is bigger;}
?
/body
/html浏览器验证php网页IP/test.php4.2.3、案例2动态网站调用数据库创建PHP测试页面,连接并查询MariaDB数据库。vim /usr/local/nginx/html/mysql.php
?php
$mysqli new mysqli(localhost,root,,mysql);
#注意root为mysql数据库的账户名称密码需要修改为实际mysql密码无密码则留空即可
#localhost是数据库的域名或IPmysql是数据库的名称
if (mysqli_connect_errno()){die(Unable to connect!). mysqli_connect_error();
}
$sql select * from user;
$result $mysqli-query($sql);
while($row $result-fetch_array()){printf(Host:%s,$row[0]);printf(/br);printf(Name:%s,$row[1]);printf(/br);
}
?进入数据库创建新的用户‘jy’systemctl restart mariadb.service
mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type help; or \h for help. Type \c to clear the current input statement.MariaDB [(none)] create user jylocalhost identified by 123;
Query OK, 0 rows affected (0.00 sec)验证浏览器访问IP/mysql.php会看到Namejy安全配置5.1、登录认证在HTTP中HttpAuthBasic模块可以使用用户名和密码基于 HTTP 基本认证Basic access authentication这是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。默认值 auth_basic off 作用域 http, server, location, limit_except 该指令包含用于 HTTP 基本认证 的测试名和密码在server模块中添加以下配置信息开启认证提示vim /usr/local/nginx/conf/nginx.conf
auth_basic password; # 自定义提示语句开启认证提示
auth_basic_user_file /usr/local/nginx/pass; # 密码文件存放位置在pass文件中注auth_basic 可设置为off或其它字符串为off时表示不开启密码验证或者#注释效果一样auth_basic_user_file 为包含用户名和密码的文件具体位置就是htpasswd生成账号及密码的存放路径安装创建加密文件软件yum -y install httpd-tools首次创建加密文件、用户增加用户不用-chtpasswd -c /usr/local/nginx/pass tom # pass是加密文件tom是用户提示输入密码验证浏览器登录网页输入用户和密码5.2、https证书配置--with-http_ssl_module是安全网站模块源码安装Nginx时必须使用–with-http_ssl_module参数启用加密模块对于需要进行SSL加密处理的站点添加ssl相关指令设置网站需要的私钥和证书。openssl包含SSL协议库、应用程序以及密码处法库自签名openssl系统内置加密算法对称算法AES、DES使用相同的字符串加密和解密主要应用在单机数据加密。应用案例 RAR、ZIP压缩加密非对称算法RSA、DSA利用公钥锁加密私钥钥匙解密主要应用在网络数据加密。应用案例https、ssh信息摘要MD5、sha256、sha512数据校验主要应用在数据完整性校验。5.2.1、加密网站设置更改配置文件vim /usr/local/nginx/conf/nginx.confserver {listen 443 ssl;server_name localhost; # IP或域名ssl_certificate cert.pem; # 公钥ssl_certificate_key cert.key; # 私钥ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root html;index index.html index.htm;}}创建私钥用来解密的openssl genrsa /usr/local/nginx/conf/cert.key # genrsa使用rsa非对称算法创建证书正式的证书需要花费证明https是合规的里面包含公钥openssl req -x509 -key /usr/local/nginx/conf/cert.key /usr/local/nginx/conf/cert.pemYou are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ., the field will be left blank.
-----
Country Name (2 letter code) [XX]:JY # 国家
State or Province Name (full name) []:JY # 省份
Locality Name (eg, city) [Default City]:JY # 城市
Organization Name (eg, company) [Default Company Ltd]:JY # 公司
Organizational Unit Name (eg, section) []:JY # 部门
Common Name (eg, your name or your servers hostname) []:JY # 服务器
Email Address []:JY163.com # 邮箱注req -x509请求创建-x509格式的证书-x509证书是国际通用标准。-key /usr/local/nginx/conf/cert.key指定私钥创建公钥重新加载文件 systemctl reload nginx.service 验证mkdir /usr/local/nginx/html_c
echo nginx-c~~~~ /usr/local/nginx/html_c/index.html
curl -k https://www.jiangying.com # -k忽略风险提示6.地址重写6.1、URL重写介绍 和apache等web服务软件一样rewrite的主要功能是实现URL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块但是也必须要PCRE的支持。 Rewrite功功能是Nginx服务器提供的一个重要功能。几乎是所有的web产品必备技能用于实现URL重写。URL重写是非常有用的功能比如它可以在我们在改变网站结构后不需要客户端修改原来的书签也不需要其他网站修改对我们网站的友情链接还可以在一定程度上提高网站的安全性能够让我们的网站显得更专业。6.2、应用场景域名变更京东用户跳转 从某个连接跳到另一个连接伪静态场景 便于CDN缓存动态页面数据rewrite地址重写可以定义用户的访问路径可以看到的实际内容。相同网站间的调转获得一个来访的URL请求然后改写成服务器可以的另一个URL的过程。地址重写可以是网页、域名、浏览器。重写优点缩短URL隐藏实际路径提高安全性易于用户记录和键入易于被搜索引擎收录正则表达式区分大小写匹配~不区分大小写匹配~*区分大小写不区配~不区分大小写不匹配~*。语法格式— 宽松匹配rewrite 匹配路径A 实际页面B 选项 # 浏览器输入路径A看到页面B网页名前后可以加东西— 精确匹配rewrite ^匹配路径$A 实际页面B 选项 # 网页名前后不可以加东西— 条件判断if(条件){任务} # 满足什么条件就执行重定向到哪个地址—选项有last本条规则匹配完成后继续向下匹配新的location url规则Break本条规则匹配完成既终止不再匹配后面的任何规则redirect临时重定向状态码302爬虫不敢兴趣permanent永久重定向状态码301爬虫感兴趣6.2.1、相同网站不同页面rewrite ^/a.html$ /b.html redirect; # 临时打开a网站转到b网站加上^和$符号严格匹配否则可以在前后加字符符号。
rewrite ^/a.html$ /b.html permanent; # 永久但是redirect为临时重定向permanent为永久重定向6.2.2、不同网站之间的跳转rewrite /(.*) 新网站网址/$1 # 将旧网站调转到新网站()保留/理解为复制(.*)保留/复制任意值$1相当于将前面保留的内容粘贴/复制到新网站之后6.2.3、不同浏览器或访问端之间的调转if ($http_user_agent ~* firefox){rewrite /(.*) /firefox/$1;}注条件判断如果用户使用了火狐浏览器就进行地址重写操作让用户看到火狐专属页面。if判断语句()放条件$http_user_agent是nginx的内置变量存储了用户的信息比如用的什么浏览器* firefox~匹配正则*忽略大小写包含有firefox字样{}放的任务6.2.4、针对同一个范围同一个范围有多个rewrite之后系统会整体分析跳转最终位置需要在语句结尾添加last同一个范围的rewrite不发生混淆。rewrite ^/a.html$ /b.html last;
rewrite ^/b.html$ /c.html ;6.2.5、针对不同范围在不同的location下面有多个rewrite之后地址重写Break不再读其他的语句结束请求不同范围的rewrite不发生混淆。rewrite ^/a.html$ /b.html break;7.错误页面HTTP常见错误代码列表200一切正常301表示网址的重定向临时重定向302临时重定向400请求语法错误客户端方面的问题401访问被拒绝账户或密码错误403资源不可用通常由于服务器上文件或目录的权限设置导致禁止访问客户端额IP地址被拒绝404无法找到指定位置的资源Not Found服务端不知道客户端请求的资源有哪个410服务端知道客户端请求的资源曾经存在但是现在不存在了414请示UIR头部太长500服务器内部错误502web服务器没有回应没有接受到有效信息。服务器作为网关或者代理时为了完成请求访问下一个服务器但该服务器返回了非法的应更改nginx404报错的页面显示error_page 404 /test.jpg; # 配置错误页面然后存储一个test.jpg图片到/usr/local/nginx/html/目录下。8.状态页面status模块可以查看网站后台数据如Nginx连接数等信息--with-http_stub_status_module开启模块功能。安装模块--with-http_stub_status_module./configure --with-http_stub_status_module
make make install状态页面设置location /status {
stub_status on; # 显示后台数据
allow 192.168.65.21; # 允许查看的数据的服务器
deny all; # 禁止其他服务器查看
}访问状态status页面curl http://IP/status Activeconnections当前活动的连接数量当前有多少用户访问该网站。Accepts已经接受客户端的连接总数量。Handled已经处理客户端的连接总数量。Requests客户端发送的请求数量。Reading当前服务器正在读取客户端请求头的数量。Writing当前服务器正在写响应信息的数量。Waiting当前多少客户端在等待服务器的响应。9.优化配置9.1、缓存优化 解决客户端访问头部信息过长的问题还要以缓存文件到客户缓存服务器还可以通过varnishsquid缓存文件搭建缓存服务器。增加用户访问速度 。当客户端在访问服务器时由服务器决定将生么文件缓存在客户端。缓存优化配置location ~* \.(jpg|html|txt)$ { # 缓存文件类型
expires 30d; # 缓存时长
}访问网站通过浏览器缓存Expires过期时间是一个月说明缓存成功。9.2、超长地址 nginx是一个强大的http服务器但是在使用过程中发现当遇到超长的post请求或者get请求时nginx会返回413、400、414等状态码这是因为请求串长度超过了nginx默认的缓存大小或者请求串大小。超长地址访问设置在主配置文件中server之外http之内。client_header_buffer_size 200k; # 改为200K
large_client_header_buffers 4 200k; # 如果200k不够用再添加4个200k注client_header_buffer_size可以定义将识别的头部信息(包含地址栏)的大小large_client_header_buffers定义个数9.2、并发优化9.2.1、开发和并行的区别 「并发」强调的是可以一起「出『发』」「并行」强调的是可以一起「执『行』」。并发与可以一起出发的并发concurrent相对的是不可以一起出发的顺序sequential顺序上一个开始执行的任务完成后当前任务才能开始执行并发无论上一个开始执行的任务是否完成当前任务都可以开始执行也就是说A B 顺序执行的话A 一定会比 B 先完成而并发执行则不一定。并行与可以一起执行的并行parallel相对的是不可以一起执行的串行serial串行有一个任务执行单元从物理上就只能一个任务、一个任务地执行并行有多个任务执行单元从物理上就可以多个任务一起执行也就是说在任意时间点上串行执行时必然只有一个任务在执行而并行则不一定。总结 综上并发与并行并不是互斥的概念只是前者关注的是任务的抽象调度、后者关注的是任务的实际执行。而它们又是相关的比如并行一定会允许并发。单核 CPU 多任务并发不必等上一个任务完成才开始下一个任务、串行只有一个实际执执行任务的 CPU 核多线程并发、串行所有线程都在同一个核上执行并发、并行不同线程在不同的核上执行9.2.2、优化nginx并发worker_processes 2;
events {worker_connections 500000;
}注worker_processes定义后台开启nginx的进程数量与CPU数量一致worker_connections限制访问用户一个nginx可以允许访问的用户数9.2.3、文件访问Linux系统默认打开文件的个数最大不得超过1024客户端访问一个页面相当于打开了一个文件需要改动linux的配置文件。临时配置ulimit -n # 查看同时打开文件的数量
ulimit -n 100000 # 配置同时打开文件的数量永久配置vim /etc/security/limits.conf
* soft nofile 10000
* hard nofile 10000注*服务器nofile打开文件的限制soft软限制达到之想要打开设置。hard硬限制最多打开限制后有硬限制报警。9.2.4、压测ab -c 2000 -n 2000 http://192.168.65.21/ # -c访问人数-n访问次数100%证明测试成功 9.3、会话管理9.3.1、hash根据客户端的IP地址转发同一台服务器可以保持回话。这个方法确保了相同的客户端的请求一直发送到相同的服务器以保证session会话。这样每个访客都固定访问一个后端服务器可以解决session不能跨服务器的问题。upstream jiangying {
ip_hash;
server 192.168.65.22:80;
server 192.168.65.10:80;
}其他【hash $cookie_jsessionid; 】根据jsessionid地址转发同一台服务器【hash $request_uri;】根据uri地址转发同一台服务器适用于访问不同的服务器资源注意在nginx版本1.3.1之前不能在ip_hash中使用权重weight。ip_hash不能与backup同时使用。此策略适合有状态服务比如session。当有服务器需要剔除必须手动down掉。9.3.2、缓存客户登录session与Cookie作用避免客户重复登录。客户端登陆时由服务器端的session与客户端的cookies的id作对比。—Session【服务端】存储在服务器端保存用户名、登陆状态等信息—Cookies【客户端】由服务器下发给客户端保存在客户端/var/lib/php/session。保存的内容主要包括SessionIDmemcached简介可以利用内存读写数据的数据库服务创建分布式缓存服务器高性能的分布式缓存服务器集中缓存数据库查询结果减少数据库访问次数以提高动态web应用的响应速度官方网站http://memcached.org/9.3.2.1、环境配置关闭防火墙和selinux部署有登录界面的LNMP动态网站配置代理集群在后端服务器 /usr/local/nginx/html/存储PHP网页部署memcached存储服务器、telnet远程登录工具yum -y install memcached telnet
systemctl start memcached.service
systemctl enable memcached.service查看memcached的端口cat /etc/sysconfig/memcached
PORT11211
USERmemcached
MAXCONN1024
CACHESIZE64
OPTIONStelnet测试memcachedtelnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is ^].memcached常用指令set name 0 180 10 # 添加或替换变量,创建变量name0不压缩存活190s,存放10个字符
get name # 读取变量
delete name # 删除变量
add name 0 180 10 # 变量不存在则添加
replace name 0 180 10 # 替换
flush_all # 清空所有
quit # 退出登记9.3.2.2、session共享配置安装php-pecl-memcache工具关联PHP和memcacheyum -y install php-pecl-memcache
systemctl start php-fpm登录后端服务器节点配置session存储vim /etc/php-fpm.d/www.conf
php_value[session.save_handler] memcache # 存储的方式
php_value[session.save_path] tcp://192.168.65.21:11211 # 存储的地址测试session共享浏览器访问服务器刷新页面后登录账户会被记录在memcached服务器再次刷新页面调度器切换服务器后账户信息还在两台后端服务器使用的是同一个帐户。9.3.2、sticky模块Sticky是nginx的一个模块它是基于cookie的一种nginx的负载均衡解决方案通过分发和识别cookie来使同一个客户端的请求落在同一台服务器上默认标识名为route。官网https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/工作原理1.客户端首次发起访问请求nginx接收后发现请求头没有cookie则以轮询方式将请求分发给后端服务器。2.后端服务器处理完请求将响应数据返回给nginx。3.此时nginx生成带route的cookie返回给客户端。route的值与后端服务器对应可能是明文也可能是md5、sha1等Hash值4.客户端接收请求并保存带route的cookie。5.当客户端下一次发送请求时会带上routenginx根据接收到的cookie中的route值转发给对应的后端服务器。安装依赖yum -y install openssl上传解压unzip nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.zip进到源码目录重新编译./configure --prefix/usr/local/nginx --add-module/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d备注--add-module添加第三方模块错误make报错解决修改源码修改后重新执行编译vim /root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/ngx_http_sticky_misc.h
#include ngx_config.h
#include ngx_core.h
#include ngx_http.h
#include ngx_string.h
#include openssl/sha.h
#include openssl/md5.h备份之前的程序mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old编译好的Nginx程序替换到原来的目录里cp nginx-1.19.3/objs/nginx /usr/local/nginx/sbin/升级检测make upgrade检查程序/usr/local/nginx/sbin/nginx -V配置sticky模块的使用upstream jiangying {
sticky;
server 192.168.65.21;
server 192.168.65.22;
}备注每台后端真实服务器都会有一个唯一的route值所以不管你真实服务器前端有几个装了sticky的nginx代理他都是不会变化的。参数sticky [nameroute] [domain.foo.bar] [path/] [expires1h] [hashindex|md5|sha1] [no_fallback] [secure] [httponly];—[nameroute]设置用来记录会话的cookie名称—[domain.foo.bar]设置cookie作用的域名—[path/]设置cookie作用的URL路径默认根目录—[expires1h]设置cookie的生存期默认不设置浏览器关闭即失效需要是大于1秒的值—[hashindex|md5|sha1]设置cookie中服务器的标识是用明文还是使用md5值默认使用md5—[no_fallback]设置该项当sticky的后端机器挂了以后nginx返回502 (Bad Gateway or Proxy Error) 而不转发到其他服务器不建议设置—[secure]设置启用安全的cookie需要HTTPS支持—[httponly]允许cookie不通过JS泄漏没用过9.4、防盗链 防盗链简单来说就是存在我们服务中的一些资源只有我们规定的合法的一类人才能去访问其他人就不能去访问的资源如cssjsimg等资源。 具体点就是用户发送请求给nginx服务器nginx服务器根据请求去寻找资源请求的比如说是有个index.html文件这个文件中会包含很多jscssimg等资源这些文件在这个骨架中会被二次请求在第二次请求时会在请求头部上加上有个referer这个referer只会在第二次请求时才会被加上。referer表示第二次资源的来源地址9.4.1、防盗链配置 valid_referers:nginx会通过查看referer自动和valid_referers后面的内容进行匹配如果匹配到了就将$invalid_referer变量置0如果没有匹配到则将$invalid_referer变量置为1匹配的过程不区分大小写语法valiad_referers none|blocked|server_names|string— none如果header中的referer为空允许访问— blocked在header中的referer不为空但是该值被防火墙或代理服务器进行伪装过如不带“http://”、“https://”等协议头的资源允许访问。— server_names指定具体的域名或者IP默认值-位置可以书写的地方serverlocation在需要防盗链的location中配置valid_referers 192.168.65.21;
if ($invalid_referer){
rewrite ^/ /image/x.png break; # 匹配的提示页面
return 403; # 返回的提示码
}9.5、curl安装curlyum -y install curl使用curl测试显示head的信息curl -I http://192.168.65.21
HTTP/1.1 200 OK
Server: nginx/1.19.3
Date: Mon, 13 Mar 2023 08:12:30 GMT
Content-Type: text/html
Content-Length: 5
Connection: keep-alive
Last-Modified: Fri, 03 Mar 2023 03:56:47 GMT
ETag: 64016fff-5
Accept-Ranges: bytes9.6、keepaliveHTTP协议的Keep-Alive意图在于短时间内连接复用希望可以短时间内在同一个连接上进行多次请求/响应在http协议header中可以看到当前连接状态。TCP的KeepAlive机制意图在于保活、心跳检测连接错误。当一个TCP连接两端长时间没有数据传输时(通常默认配置是2小时)发送keepalive探针探测链接是否存活。应用场景明显的预知用户会在当前连接上有下一步操作复用连接有效减少握手次数尤其是https建立一次连接开销会更大。关闭场景 访问内联资源一般用缓存不需要keepalive长时间的tcp连接容易导致系统资源无效占用。9.6.1、客户端客户端使用keepalive在http区域配置。vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65;
keepalive_time 1h;
keepalive_request 1000;
send_timeout 60;备注keepalive_timeout超过配置时间没有活动会让keepalive失效用于设置Nginx服务器与客户端保持连接的超时时间0即关闭默认65s keepalive_time一个tcp连接总时长超过之后强制失效默认1hkeepalive_request单个连接中可处理的请求数一个tcp复用中可以并发接收的请求个数默认1000keepalive_disable不对某些浏览器建立长连接默认msie6send_timeout【注意准备过程中不是传输过程】系统中若有耗时操超过时间强制断开连接默认60s9.6.2、上游服务器upstream中配置vim /usr/local/nginx/conf/nginx.conf
keepalive 100;
keepalive_timeout 65;
keepalive_request 1000;备注keepalive向上游服务器的保留连接数keepalive_timeout连接保留时间keepalive_requests一个tcp复用中 可以并发接收的请求个数server中配置首先需要配置使用http1.1协议。以便建立更高效的传输默认使用http1.0默认使用http1.0协议需要在request中增加”Connection keep-alive“ header才能在Upstream中所配置的上游服务器默认都是用短连接即每次请求都会在完成之后断开而HTTP1.1默认支持。vim /usr/local/nginx/conf/nginx.conf
proxy_http_version 1.1;
proxy_set_header Connection ; # 清除close信息9.6.3、验证AB安装yum install httpd-tools参数- -n 即requests用于指定压力测试总共的执行次数。- -c 即concurrency用于指定的并发数。- -t 即timelimit等待响应的最大时间(单位秒)。- -b 即windowsizeTCP发送/接收的缓冲大小(单位字节)。- -p 即postfile发送POST请求时需要上传的文件此外还必须设置-T参数。- -u 即putfile发送PUT请求时需要上传的文件此外还必须设置-T参数。- -T 即content-type用于设置Content-Type请求头信息例如application/x-www-form-urlencoded默认值为text/plain。- -v 即verbosity指定打印帮助信息的冗余级别。- -w 以HTML表格形式打印结果。- -i 使用HEAD请求代替GET请求。- -x 插入字符串作为table标签的属性。- -y 插入字符串作为tr标签的属性。- -z 插入字符串作为td标签的属性。- -C 添加cookie信息例如Apache1234(可以重复该参数选项以添加多个)。- -H 添加任意的请求头例如Accept-Encoding:gzip请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。- -A 添加一个基本的网络认证信息用户名和密码之间用英文冒号隔开。- -P 添加一个基本的代理认证信息用户名和密码之间用英文冒号隔开。- -X 指定使用的和端口号例如:126.10.10.3:88。- -V 打印版本号并退出。- -k 使用HTTP的KeepAlive特性。- -d 不显示百分比。- -S 不显示预估和警告信息。- -g 输出结果信息到gnuplot格式的文件中。- -e 输出结果信息到CSV格式的文件中。- -r 指定接收到错误信息时不退出程序。- -h 显示用法信息其实就是ab -help。