Linux之Nginx设置篇

[复制链接]
发表于 2025-7-9 01:19:44 | 显示全部楼层 |阅读模式
一、Ngixn核心重点



  • Nginx是一款功能强盛HTTP和反向代理服务器,如今大部分公司用于使用其Web服务器
  • 在Nginx还未出世之前都是在使用比较传统Apache服务器,两则都能处理Web请求,但是后者处理效率更高、包括其负载平衡,反向代理功能都很强,硬件资源占有率很少,并呢个更好的和后端服务进行对接
  • 模块化组件多种多样,它有很多模块组成---HTTP模块、EVENT模块,PROXY,Fstcgi,upstream等多个模块构成,而且模块又由多个功能组成:Handlers,Filters,Proxies
  • 工作原理主程要依据master进分配使命给worker进程,然后我们client端访问就是被分配的各个worker进程,在企业高并发情况下,Nginx采用的是epoll模型,属于异步非阻塞,依据事件响应完成,传统Apache依据select遍历全部句柄完成
  • Ngixn资源定位的关键依赖于Location,一般都是由location分发不同的模块来完成相应的工作
  • worker内部分配流程,Nginx默认监听端口80由Master管理,然后我会有多个woker工人来抢分发下来的task,当抢到这个事件时我会将这件事务进行锁定,而其他工人无法接这个使命,最后完成请求转发,数据读取等操作


二、Nginx实战剖析

服务管理篇

2.1.1Nginx安装设置

具体详细安装步骤可以参考一下我的博客哦:Linux之Nginx安装及设置原理篇(一)-CSDN博客
这里主要叙述一下安装时留意要点:
  1. # 在配置方面具体要注意以下几个方面
  2. # 1.首先需要主要的是Nginx需要用awk进行替换避免遇到一些不同机型版本兼容问题(这里以Nginx1.26.1版本为例)
  3. sed -i -e 's/1.26.1//g' -e 's/nginx\//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h
  4. # 2.预编译阶段注意模块组件(gzip,ssl)
  5. useradd -r -s /sbin/nologin www && ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module
复制代码


2.1.2Nginx版本升级管理

以下介绍了一些详细的升级运维干系下令:
  1. # 查看nginx运行状况
  2. ps -ef | grep nginx
  3. #重启Nginx服务
  4. nginx -s reload   or kill -HUP 'path://nginx.pid'
  5. #检查配置
  6. path://nginx -t
  7. #停止服务
  8. nginx -s stop  or pkill nginx
  9. #查看版本信息
  10. nginx -V
  11. #替换就旧版本的Nginx备份旧版本的nginx可执行文件,复制新版本的nginx这行文件
  12. mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old
  13. cp objs/nginx /usr/local/nginx/sbin/
复制代码
服务优化篇

2.2.1   设置文件常见优化



  • (一)设置文件
设置文件存放路径:/usr/local/nginx/conf/nginx.conf
起首介绍几个常见的服务设置
a.下面是针对events文件的详解,主要牵涉到了两个文件分别最大毗连数和worker多使命调理的启动
  1. events{
  2. worker_connections  1024;    #worker进程处理最大连接数
  3. multi-accept on;   允许worker进程一次处理多个连接
  4. }
复制代码
b.http虚拟服务器设置
参数sendfilekeepalive_timeoutgzipinclude
表明启用高效文件传输保持连续超时时间启用压缩包含其他设置文件

在此模块内部,通常会定义一个server模块,里面会让你添加服务的干系设置,比方:server_name,listen,root记录网站跟目录,index记录了其索引文件

这里listen监听端口即就是与http虚拟服务器进行socke毗连
server_name用于指定主机名
  1. server {
  2.     listen    80;
  3.     server_name    localhost;
  4. }
复制代码
在server虚拟主机中还会牵涉到一个重要概念------location设置
关于location的URL匹配规则主要涉及到了三种方式    (精确匹配=、前缀匹配^~,正则匹配~或~*)
这里root即指定了文件体系路径,index代表着网页查找索引,try_file 表现次序查找文件,expires设置了缓存时间
  1. location / {
  2.    
  3.     root html;
  4.     index  index.htm index.html;
  5.     try_fiiles on;
  6.     expires: 3d;
  7. }
复制代码
以下对于设置针对于后缀文件为mine.type文件实现了自动跳转至静态文件操作

修改完设置文件后要及时让nginx服务重置
  1. #关闭防火墙
  2. systemctl disable firewalld.service
  3. systemctl restart firewalld
  4. # 重置Nginx服务
  5. nginx -s reload
  6. # 查询worker进程分布情况
  7. ps -eo,psr,pid,args | grep nginx
  8. #监控监控cpu利用率
  9. top -p $(pgrep -d','nginx)
  10. 将域名加入windows中hosts目录中
复制代码
值得留意的是pid:代表nginx主进程id,include包含其他设置文件


  • (二)服务优化
tips:当设置多个server时,端口号是否不同主要取决于其监听方式
虚拟主机设置

 >>>>方法一:基于域名实现
  1.         server {
  2.           listen 88;
  3.           server_name www.abc.com;
  4.           location / {
  5.                 root html/tt1;
  6.                 index index.html index.htm;
  7.           }
  8.            error_page   500 502 503 504  /50x.html;
  9.           location /50x.html {
  10.                 root html;
  11.           }
  12.         }
  13.         server{
  14.           listen 88;
  15.           server_name www.666.com;
  16.           location / {
  17.                 root html/666/;
  18.                 index index.html index.htm;
  19.           }
  20.             error_page   500 502 503 504  /50x.html;
  21.             location /50x.html {
  22.                    root html;
  23.         }
  24. }
复制代码
访问结果如下:


>>>方法二    含有多个IP时
  1.      server {
  2.                 listen 192.168.1.100:88;
  3.                 listen 192.168.1.200:88;
  4.       }
复制代码
不同域名和不同ip必须使用不同端口
  1. server {
  2.     listen 80;
  3. }
  4. server {
  5.     listen 8080;
  6. }
复制代码
【留意】在(同一IP/域名条件下)广泛运用Web服务和后台管理平台上

默认设置与location

当server监听到雷同的端口,但没有找到与匹配虚拟服务是默认跳转到加入了default-server设置项的虚拟主机
  1. server {
  2.     listen 80 default-server
  3. }
复制代码

Location作为Nginx资源规则制定者,用于匹配符合要求URI
其语法格式为: location [修饰符] 匹配模式{}
几种常见的分类模式如下:
资源规则前缀匹配精确匹配正则匹配(区分大小写)正则匹配(不区分大小写)有限前缀匹配
语法结构 location = /prefix/ {
       #匹配以prefix/开头的URI
}
location /exact {
        #只匹配/exact这个uri
}
location ~ \.php${
        匹配以.php末了的文件
}
location ~* \.(jpg|jpeg|png|gif)${
#匹配图片扩展名文件,不区分大小写
}
location ^~/images/{
#以/images/开头的uri
}

【案例】将我桌面上的图片匹配显示至浏览器窗口,需要加入以下设置

  1. location ~* \.(jpg|jpeg|png|gif)$ {
  2.            root html/;
  3.            expires 3d;
  4.            access_log off;
  5. }
复制代码
结果如下:



其优先级如下:
        精准匹配>有限前缀匹配>正则匹配>前缀匹配


2.2.2  负载平衡

负载平衡就是将网络流量交给多台服务器来处理,从而优化资源使用,提高吞吐量,淘汰访问时间,解决了单一资源负载问题
用生活上的例子可以根据服务员接待客户的例子来说,在工作量上来看负载平衡工作效率很高,让使命分配的更加平衡了

设置修改部分
通过测试发现结果有效三个网页均能在不同端口中打开
  1. ### 负载均衡部分
  2.         upstream myapp{
  3.                 server 127.0.0.1:8001 weight=2;
  4.                 server 127.0.0.1:8002;
  5.                 server 127.0.0.1:8003;
  6.         }
  7.         server{
  8.                 listen 88;
  9.                 server_name www.abc.com;
  10.                 location / {
  11.                         root html/tt1/;
  12.                         index index.html index.htm;
  13.                         proxy_pass http://myapp;
  14.                         proxy_set_header Host $host;
  15.                 }
  16.                location ~* \.(jpg|jpeg|png|gif)$ {
  17.                       root html/;
  18.                       expires 3d;
  19.                       access_log off;
  20.                }
  21.         }
复制代码
负载平衡结果如图所示:


留意:关于Nginx服务中检察下令有以下几个部分需要值得留意
1.端口查询下令:netstat -tulnp | grep -E '8001|8002|8003'
2.检察端口使用情况:lsof -i:[port]
3.逼迫关掉进程:kill -9 [pid]

2.2.3 动静态资源跳转



  • 动态APi将请求代理到外部服务(实际IP地址就是10.2.53.5:8001)

  • 设置try_files设置,假如没有代理服务器转发,将返回404
  • $remote_addr:将客户端真实IP传递给后端
具体设置代码详细如下:
  1. ### 静态资源处理
  2. location = / {
  3.     root /usr/local/nginx/html;
  4.     try_files $uri /index.html =404
  5. }
  6. ### 动态代理处理服务
  7. location /api/ {
  8.     proxy_pass http://10.2.53.5:8001/;
  9.     proxy_set_header Host $host;
  10.     proxy_set_header X-Real-IP $remote_addr;
  11. }
  12. location / {
  13.     proxy_pass http://myapp;
  14.     proxy_set_header Host $host;
  15.     proxy_set_header X-REAL-IP $remote_addr;    ##后端应用能够获得客户端真实IP
  16. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:36 , Processed in 0.081042 second(s), 31 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表