企业级Nginx使用-day1

一、重装和升级

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

旧statble 稳定版 1.12

stable 稳定版 1.16

mainline 主线版本 最新的 1.15

1558318139204

1、信号参数

Kill 命令 传输信号给进程

TERM, INT(快速退出,当前的请求不执行完成就退出)

QUIT (优雅退出,执行完当前的请求后退出)

HUP (重新加载配置文件,用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程)

USR1 (重新打开日志文件)

USR2 (平滑的升级nginx二进制文件 拉起一个新的主进程 旧主进程不停止)

WINCH (优雅的关闭worker进程)

语法:

Kill 选项参数  pid
##关闭nginx
##快速关闭
kill -INT pid
##优雅关闭
kill -QUIT pid

2、重新安装

①停止掉服务,删除编译的安装的软件包和源码包

②重新解压编译安装即可

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

3、平滑升级

升级软件版本之后,需要启动新的版本,启动不了,端口已经被占用

如果直接把旧版本的服务停止掉,会影响线上业务的使用

最佳解决办法:

①旧的不先停掉

②新的又可以起来

③旧的和新的同时提供服务,旧的请求完成之后,就停掉旧进程

-USR2 平滑启动一个进程(平滑升级)

-WINCH 优雅的关闭子进程

-QUIT 优雅关闭主进程

①编译安装新版本

shell > tar xvf nginx-1.16.0.tar.gz
shell > cd nginx-1.16.0
shell > ./configure  --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
shell > make && make install

升级新版本,需要把软件的安装路径,指定到旧版本上。

以上操作完成之后,会把原来的旧版本备份为nginx.old

img

②新旧版本同时运行

shell > kill -USR2 主进程号

img

③停止掉旧进程

查看旧的主进程号,并使用kill -WINCH 优雅的关闭的子进程,再关闭旧的主进程

shell > kill -WINCH 旧的主进程号
shell > kill -QUIT 旧的主进程号

img

img

img

4、配置文件介绍

编译的nginx默认的配置文件位置

img

核心数、连接数、并发理论值

img

img

重点掌握以下配置

img

img

==http=>server=>location==

http 配置里有一个,可以有多个server(apache的vhost)

一个server里,可以有多个location

二、企业中常见使用方式

##1、server配置

###1.1、基于域名虚拟机(最多)

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

核心语法

#基于http的web服务
server{
    #服务端口
    listen 80
    #绑定域名或者IP
    server_name web1.devops.com  192.168.17.241
    # 网站访问目录   资源目录
    root html/web1;
    # /  匹配了所有的url
    location / {
        #index 从前往后找  如果找不到就403了
        index index.php index.html index.htm
    }
    #php页面   需要php(php-fpm)解析为html
    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;
    }
}

①编辑配置文件,增加server段配置

img

注意:每行配置完成之后,一定要注意结束标记符号;

②解析host域名,建立网站目录及其文件

1558325413630

建立目录并且创建一个文件

shell > cd /usr/local/nginx/html
shell > mkdir web1
shell > vim index.html

img

写一些测试内容

img

③重载配置测试访问

配置修改之后,需要检测配置,然后重载配置

img

实现效果

img

###1.2、基于IP虚拟机

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

①eth0绑定多个IP地址(选做一个临时绑定ip或者配置文件绑定ip)

复制eth0,修改关键项为eth0:0

img

img

img

注意:如果是通过桌面安装的linux,启动了NetworkManager服务,需要关闭,才可以在配置文件里绑定虚拟网卡。

可以使用临时绑定一个虚拟网卡ip

shell > ifconfig eth0:1 192.168.93.180

②启动新配置,查看IP是否绑定成功

img

③配置基于IP的虚拟机

建立一个ip网站的目录

img

img

img

检测配置文件,重载配置

shell > service nginx reload

###1.3、基于端口虚拟机

默认不占用80端口,能够稍微隐秘一些

①建立网站目录

img

②建立虚拟机修改配置

img

当访问的域名或者IP没有匹配到对应的server虚拟机时,会默认访问第一个server虚拟机。

##2、案例:上线商城项目

①上传项目文件到服务器

将项目文件ftp sftp scp等工具上传到服务器

1558337394799

把项目压缩包解压

shell > unzip tp5shop.zip

②配置server虚拟机,客户端配置host解析

shell > vim /usr/local/nginx/conf/nginx.conf

1558337741053

1558337966037

③创建数据库,导入数据迁移文件

遇到以下问题:数据没有导入,没有配置项目连接数据库

1558338125291

mysql > create database tp5shop;
mysql > use tp5shop;
mysql > source /usr/local/nginx/html/tpshop.sql

1558338287040

④配置项目连接数据库

1558338361538

1558338457115

⑤测试访问

遇到问题:项目需要在runtime文件夹中写入缓存信息(需要写权限)

1558338605103

分析:

①nginx 读取静态文件 用户www

②php-fpm 读取、写入、解析php文件 用户www

应该把runtime目录的所属关系赋予www

shell > cd /usr/local/nginx/html/tp5shop
shell > chown -R www:www ./runtime

项目效果预览图

1558339019900

##3、默认官方模块

###3.1、Gzip压缩

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

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

img

图片、css(层叠样式表)、js(浏览器端执行的脚本)文件

①配置实现

img

注意:jpg格式结尾的图片,需要jpeg识别

②测试看返回信息

img

3.2、客户端缓存

B/S架构里 browser浏览器 就是客户端

告知浏览器获取的信息是在某个区间时间段是有效的。

location ~ \.(js|css)${
    expires 1h;
}
#单位参数 d day 天|H hour 小时

1558345336600

3.3、反向代理

正向代理

img

特点:知道自己使用了代理,需要填写代理服务器的IP等相关连接信息

==常见于代理客户端上网等操作。==

反向代理

img

特点:用户是无感知的,不知道使用了代理服务器。反向代理服务器是和真实访问的服务器是在一起的,有关联的。

作用:可以根据实际业务需求,分发代理页面到不同的解释器

​ 可以隐藏真实服务器的路径

==常见于代理后端服务器==

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

①配置反向代理

LNMPA

img

把php的请求转发到httpd:8080端口进行处理

把nginx或者apache网站目录路径一致

img

注意修改apache的配置文件

img

==验证例子:==

①安装httpd 需改端口8080

shell > yum install -y httpd
shell > vim /etc/httpd/conf/httpd.conf

1558346722527

1558346741256

②配置nginx的server并进行转发

1558346979750

3.4、基于IP的访问控制

基于ngx_http_access_module模块,默认可使用

语法:

deny ip 禁止ip访问

allow ip 允许访问

默认是允许所有访问的

3.5、基于用户的访问控制

基于ngx_http_auth_basic_module模块,默认可用

语法:

加密文本: 由htpasswd命令实现

htpasswd httpd里的一个工具 如果没有 可以通过yum install httpd-tool

img

创建密码文件:htpasswd -c 生成到的路径 用户名

-c 创建新文件,如果再次添加用户去掉-c参数,否则会被删除覆盖原来的

auth_basic “提示信息”

auth_basic_user_file /etc/nginx/htpasswd;

实现:

①配置实现

img

img

img

auth_basic_user_file 需要写入文件的绝对路径

②测试查看

img

3.6、目录列表显示

三、日志管理

Nginx里默认会有两种日志

access.log 访问日志 查看统计用户的访问信息 流量

error.log 错误日志 错误信息 重写信息

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

默认路径 /usr/local/nginx/logs

yum安装默认的日志目录 /var/logs/nginx

1、访问日志

①查看access.log

shell > cd /usr/local/nginx/logs
shell > cat access.log

img

②查看配置解析参数说明

shell > vim nginx.conf

img

参数意义
$remote_addr客户端的ip地址(代理服务器,显示代理服务ip)
$remote_user用于记录远程客户端的用户名称(一般为“-”)
$time_local用于记录访问时间和时区
$request用于记录请求的url以及请求方法
$status响应状态码,例如:200成功、404页面找不到等。
$body_bytes_sent给客户端发送的文件主体内容字节数
$http_user_agent用户所使用的代理(一般为浏览器)
$http_x_forwarded_for可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer可以记录用户是从哪个链接访问过来的

访问日志,可以统计分析用户的流量的相关情况。客情分析

2、错误日志

默认记录配置启动错误信息和访问请求错误信息

img

img

错误日志的作用:用来查看错误信息,通过提示的错误信息,排除错误。

3、基于域名日志分割

①开启日志的定义规则

img

img

②重启nginx测试查看

img

img