当前位置: 首页 > news >正文

nginx 企业

nginx 企业

企业级架构之Nginx

一、Nginx软件的重装与升级

在实际业务场景中,需要使用软件新版本的功能、特性,就需要对原有软件进行升级或者重装操作。

Nginx官方网站:http://www.nginx.org

旧statble 稳定版 1.16

stable 稳定版 1.18

mainline 主线版本 最新的 1.19

image-20200904095027456

1、Nginx软件重装(了解)

第一步:停止Nginx服务,直接删除编译安装的软件目录(/usr/local/nginx)或者进入解压后的源码文件夹,使用make uninstallmake distclean对其进行卸载操作。

第二步:下载需要升级的软件版本(一定要下载stable稳定版)

第三步:解压,然后重新对其进行编译安装。

注意:如果有需要,请备份配置文件和网站目录里的资源文件

2、Nginx平滑升级(重点)

问题:什么是Nginx的平滑升级?

答:Nginx的平滑升级就是在不停止业务的前提下实现对Nginx软件版本的升级。

平滑升级需要有kill命令的支持:kill命令不仅仅是用于杀掉进程,其主要功能在于对我们的软件进程发送信号。

# kill 信号 进程ID编号(PID)
-USR2  平滑启动一个进程(平滑升级)
-WINCH 优雅的关闭子进程
-QUIT  优雅关闭主进程

问题:Nginx平滑升级一共需要哪些步骤?

① 不停止原有的Nginx服务(但是必须使用原生方式启动或者需要更改Nginx脚本)
② 重新编译安装Nginx新版本
③ 使用kill -USR2启动新版本Nginx(目前两个Nginx的版本会共存)
④ 把老的Nginx的子进程全部关闭
⑤ 优雅的退出老版本Nginx的主进程(系统就只剩下新版本的Nginx进程了)

第一步:关闭正在运行的Nginx,改由原生Nginx启动方式

# systemctl stop nginx
# cd /usr/local/nginx# sbin/nginx -c /usr/local/nginx/conf/nginx.conf

------------------------------------------- 真正的升级从这里开始 ----------------------------------------------

第二步:上传nginx-1.18.0新版本Nginx软件包到Linux服务器并解压

# tar -xf nginx-1.18.0.tar.gz
# cd nginx-1.18.0

第三步:对软件进行编译安装

# ./configure  --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
# make && make install

在配置过程中,--prefix要指定和原来的老版本路径一致!!!

第四步:使用kill -USR2启动新版本的Nginx软件

# ps -ef |grep nginx
# kill -USR2 老版本的PID编号

其主要功能会根据上一次的启动方式,在重新运行一次之前的启动命令。

# cd /usr/local/nginx
# sbin/nginx -c /usr/local/nginx/conf/nginx.conf

image-20200904103334788

第五步:首先关闭老版本Nginx的所有子进程

# kill -WINCH 老版本的PID编号

第六步:关闭老版本的Nginx的主进程(到此完成新旧版本的交替工作)

# kill -QUIT 老版本的PID编号

二、企业级Nginx服务的配置

1、Nginx配置文件

在Nginx的安装目录中,有一个conf文件夹,其内部拥有一个nginx.conf的配置文件。这就是Nginx的主配置文件。

编译的nginx默认的配置文件位置:/usr/local/nginx/conf/nginx.conf

使用grep删除注释与空行:grep -Ev '#|^$' conf/nginx.conf

image-20200904105956756

原则上:

一个nginx.conf配置文件拥有一个http区块,其有且仅有一个http区块,所有的http请求都会直接打在http区块上

一个http区块可以同时拥有多个server区块,一个server区块就称之为一个虚拟主机,一个虚拟主机就对应一个项目

一个server区块可以同时拥有多个location区块,每个location区块就是一个url连接的匹配规则

2、server区块配置(虚拟主机配置)

☆ 基于域名的虚拟主机

在实际生产业务环境中,一台web服务器,需要使用多个网站部署。搭建vhost虚拟机主机实现不同域名,解析绑定到不同的目录。

案例:绑定一个www.devops.com域名,指向html/devops文件夹

第一步:创建devops项目目录

# cd /usr/local/nginx
# mkdir html/devops

第二步:编辑nginx.conf文件,添加一个server区块

# vim conf/nginx.conf
http {...server {#监听端口listen 80;#绑定域名server_name www.devops.com;#root定义项目目录root html/devops;#location /定义任意链接规则location / {#index设置默认首页index  index.html index.htm index.php;}#把php请求转发给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;}}...
}

image-20200904113528718

第三步:重新加载nginx软件

# sbin/nginx -s reload

第四步:创建一个php测试文件

# vim html/devops/index.php
<?phpecho 'hello devops!';
?>

第五步:在windows劫持www.devops.com域名指向10.1.1.11服务器

# C:\Windows\System32\drivers\etc\hosts
10.1.1.11 www.devops.com

在浏览器中访问www.devops.com域名,如下图所示:

image-20200904113906280

注:尽量使用Google或Firefox火狐浏览器

☆ 扩展:多虚拟主机配置

如果一个服务器上要同时部署多个项目,我们就需要在nginx.conf文件中同时配置多个虚拟主机,这样后期nginx.conf文件非常不便于管理。为了解决这个问题,可以把配置文件进行分离。

# cd /usr/local/nginx
# mkdir conf/conf.d				=>			conf.d相当于配置文件的子目录

虚拟主机分离

# sed -n '11,24p' conf/nginx.conf > conf/conf.d/devops.conf

注:11,24代表取nginx.conf中11~24行中的server区块

使用include选项把子配置文件包含到nginx.conf文件中

# vim conf/nginx.conf
http {...include conf.d/*.conf;...
}

重载nginx.conf配置文件

# sbin/nginx -s reload

☆ 基于IP的虚拟主机

多个IP访问同一台服务器主机,不同的IP解析到不同的vhost虚拟机中。

核心:ens33绑定多个IP地址(选做一个临时绑定ip或者配置文件绑定ip)

第一步:使用ifconfig为ens33临时绑定一个虚拟网卡IP

# ifconfig ens33:1 10.1.1.100

运行结果:# ifconfig

image-20200904143810167

第二步:建立一个虚拟主机,绑定虚拟网卡IP

# cd /usr/local/nginx
# vim conf/nginx.conf

image-20200904144455953

设置完成后,重启nginx

# sbin/nginx -s reload

第三步:在浏览器端,使用10.1.1.100访问devops目录下的index.php文件

image-20200904144356276

☆ 基于端口的虚拟主机

优势:默认不占用80端口,能够稍微隐秘一些。说白了就是不同的端口请求,访问不同的虚拟主机。

第一步:编辑nginx.conf文件

# vim conf/nginx.conf

image-20200904150730248

第二步:配置完成后,重载nginx.conf配置文件

# sbin/nginx -s reload

第三步:使用IP:端口号访问不同的虚拟主机

10.1.1.11:80

image-20200904150826756

10.1.1.11:8080

image-20200904151139107

3、DSShop商城系统上线部署

第一步:在系统中创建一个/home/www目录作为商城系统的项目目录

# mkdir /home/www

第二步:把dsshop.zip源代码上传到/home/www目录下,然后进行解压缩

# yum install unzip -y
# unzip dsshop.zip

第三步:编辑nginx.conf文件,对其进行备份操作,然后删除nginx.conf文件的注释和空行

# cd /usr/local/nginx
# cp conf/nginx.conf conf/nginx.conf.bak
# grep -Ev '#|^$' conf/nginx.conf
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root html;location / {index  index.html index.htm;}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;}error_page   500 502 503 504  /50x.html;location = /50x.html {}}
}

第四步:在nginx.conf配置文件中定义server区块,设置虚拟主机

# vim conf/nginx.conf
...
http {################# 配置开始 ################server {listen 80;server_name www.shop.com;root /home/www/public;location / {index  index.html index.htm 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;}}################# 配置结束 ################...
}http://www.shop.com
等价于
http://www.shop.com/index.html
http://www.shop.com/index.htm
http://www.shop.com/index.php

传统的PHP项目,其项目目录直接指定到/home/www即可,但是如果这个项目采用的是PHP框架进行开发的(ThinkPHP或Laravel),必须指定到其内部的public文件夹。

设置完成后,一定要重新加载nginx.conf配置文件

# sbin/nginx -s reload

第五步:在Windows中劫持www.shop.com域名

# C:\Windows\System32\drivers\etc\hosts
10.1.1.11 www.shop.com

第六步:设置目录权限(需要向项目中写入配置信息、模板文件等等)

image-20200904170013841

设置权限:

# cd /home/www
# chmod a+w public/uploads
# chmod a+w runtime
# chmod a+w public/install
# chmod a+w application/database.php

第七步:数据库兼容性配置

默认情况下,我们安装的这个开源的商城系统是基于5.6及5.6以下的MYSQL数据库,我们安装的是5.7,所以要在my.cnf中配置兼容性(向前兼容)

# cd /usr/local/mysql
# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-bin=/usr/local/mysql/data/binlog
log-error=/usr/local/mysql/data/mysql.err
server-id=10
character_set_server=utf8mb4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES# service mysqld restart

注:兼容性问题解决,就是依靠sql_mode最后一段内容

image-20200904170537351

第八步:设置管理选项(添加一个后台管理的账号和密码)

image-20200904170606186

第九步:设置URL地址重写模式(支持伪静态)

方案一:

# cd /usr/local/nginx
# vim conf/nginx.conf
http {...################# 配置开始 ################server {listen 80;server_name www.shop.com;root /home/www/public;#匹配首页且仅能匹配首页location =/ {rewrite / /index.php redirect;}location / {index  index.html index.htm index.php;################ 配置开始 #################if (!-e $request_filename) {rewrite ^/index.php(.*)$ /index.php?s=$1 last;break;}################ 配置结束 #################}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;}}################# 配置结束 ################...
}

rewrite重写规则:匹配所有链接,如果是404,则跳入if结构。^(.*)$匹配链接地址,然后替换为/index.php?s=/home/search/index/cate_id/75.html

方案二:

# cd /usr/local/nginx
# vim conf/nginx.conf
http {...################# 配置开始 ################server {listen 80;server_name www.shop.com;root /home/www/public;location / {index  index.html index.htm index.php;################ 配置开始 #################if (!-e $request_filename) {rewrite ^/index.php(.*)$ /index.php?s=$1 last;rewrite ^(.*)$ /index.php?s=$1 last;break;}################ 配置结束 #################}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;}}################# 配置结束 ################...
}

到此,整个DSShop商城系统就部署完毕了!

三、Nginx默认官方模块

1、什么是官方模块

所谓的Nginx官方模块主要是Nginx软件安装完成后自带的一些模块,不需要独立安装。其可以实现一些特殊的功能。

2、GZIP压缩

压缩文件大小变小了,传输更快了。目前市场上大部分浏览器是支持GZIP的。IE6以下支持不好,会出现乱码情况。

GZIP压缩主要针对:CSS文件、JS文件以及图片等静态资源

配置项:

http://nginx.org/en/docs/http/ngx_http_gzip_module.html

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain text/css text/javascript application/x-javascript image/jpeg image/gif image/png;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";

案例:压缩bmp图片

image-20200904180640857

设置完成后,重载Nginx

# sbin/nginx -s reload

使用火狐浏览器,禁止缓存,F12查看传输信息

image-20200904180813472

3、缓存模块(针对客户端浏览器)

告知浏览器获取的信息是在某个区间时间段是有效的,基本格式:

expires 30s; //表示把数据缓存30秒
expires 30m; //表示把数据缓存30分
expires 10h; //表示把数据缓存10小时
expires 3d;  //表示把数据缓存3天

案例:缓存图片/js/css文件,缓存时间为1天

location ~ \.(jpg|jpeg|gif|png|js|css)$ {expires 1d;
}

运行结果:

image-20200904181932029

http://www.wxhsa.cn/company.asp?id=883

相关文章:

  • java毕业设计-基于jspm网上书店管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等) - 详解
  • redis scan命令替换keys 命令
  • 聊一聊 .NET 某企业ECM内容管理系统 内存暴涨分析
  • SQL之字符串问题大坑
  • 可编辑区域
  • ES 跨订单的详情全局分页 解决
  • macbook pro2012怎么安装windows系统
  • docker-compose安装PostgreSQL和pgvector向量数据库
  • 【连续五届稳定检索、院士杰青云集】第六届先进材料与智能制造国际学术会议(ICAMIM 2025)
  • macbook airװwindowsϵͳ
  • 微信小程序语音转文字
  • 解决 windows远程桌面报错“CredSSP加密数据库修正”
  • 官网Chat对话 vs. API调用:本质区别与优化策略 - 浪矢
  • 【原创软件】第15期:免费好用的Excel合并软件,无需安装office也可以合并
  • 有关于简道云模式选择的思考
  • 详细介绍:80(HTTP默认端口)和8080端口(备用HTTP端口)区别
  • 一加9pro安卓14降级到安卓13记录
  • 【科普系列】隐藏在OSI模型里的“交通指挥员”——UDS会话层
  • openssl编程之sm2加解密代码示例
  • list对象转json_json转list对象集合
  • Gitee(码云)中国本土领先的代码托管与研发协作平台
  • H5游戏性能优化系列-----总纲
  • 阿里云边缘安全加速ESA保障服务安全
  • rancher服务启动失败
  • C# Web开发教程(四)
  • HarmonyOS运动开发
  • 【2025-09-09】家庭决策
  • 【2025-09-08】社交活动
  • 【2025-09-07】连岳摘抄
  • 【2025-09-10】满37周岁