Nginx服务介绍说明
特点
nginx服务并发处理静态资源能力将强, 消耗系统资源较少
功能
网站web服务功能
反向代理负载均衡功能
网站缓存服务功能
Nginx的官方介绍: http://nginx.org/en/
Nginx的参考资料: https://lnmp.org/nginx.html
Nginx软件安装部署过程
1) 利用yum方式进行安装
特点
对nginx主要应用基本功能
非官方源yum安装 yum install -y nginx 旧版本 默认配置/目录结构
官员源yum安装 更新yum源 ---> yum install -y nginx 新版本 默认配置/目录结构
安装步骤
第一步
yum install -y yum-utils
第二步
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
第三步
yum-config-manager --enable nginx-mainline
第四步
yum install -y nginx
2) 编译安装软件方式
特点
对nginx想应用高级功能
安装步骤
第一步: 解决nginx软件依赖问题
yum install -y openssl-devel pcre-devel gcc gcc-c++ autoconf automake make
openssl: 实现支持网站HTTPS访问功能
pcre: 是否兼容perl语言正则表达式
第二步: 创建一个程序虚拟用户(管理指定站点目录 管理进程信息)
useradd nginx -M -s /sbin/nologin
第三步: 下载nginx程序源码包
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1
第四步: 进行软件编译安装
1) 编译配置过程
./configure --prefix=/application/nginx-1.16.1/ --sbin-path=/bin/ --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module
--prefix=PATH set installation prefix
指定软件程序保存目录(不用必须存在)
--sbin-path=PATH set nginx binary pathname
指定nginx程序命令文件保存路径 /bin/
--modules-path=PATH set modules path
指定模块数据保存路径
--conf-path=PATH set nginx.conf pathname
指定配置文件保存路径
--user=USER set non-privileged user for worker processes
设置worker进程管理用户
--group=GROUP set non-privileged group for worker processes
设置worker进程管理用户组
--with-http_ssl_module enable ngx_http_ssl_module
支持HTTPs访问功能
--with-http_stub_status_module enable ngx_http_stub_status_module
nginx访问状态监听模块
2) 编译过程(翻译过程)
make
3) 编译安装过程
make install
4) 安装成功, 查看配置信息
nginx -V
查看nginx目录结构及其命令
目录结构
/etc/nginx --- 保存nginx程序配置文件目录
/etc/nginx/conf.d --- 保存nginx网站主机配置文件(test.conf www.conf)
/var/log/nginx/ --- 保存nginx程序日志文件(error.log access.log)
/usr/share/nginx/html --- 保存nginx程序代码数据信息(站点目录)
/usr/sbin/nginx --- 保存nginx命令文件目录
nginx 命令
nginx --- 直接利用命令启动服务程序
nginx -s stop --- 利用命令停止nginx服务
nginx -s reload --- 利用命令重载(平滑重启)nginx服务
nginx -V --- 查看nginx服务配置参数信息
nginx -v --- 查看nginx版本信息
nginx -t --- 检查配置文件语法是否正确
nginx 配置文件
主配置文件: /etc/nginx/nginx.conf
user nginx; --- 定义worker进程管理用户,
worker进程是处理用户请求进程
master进程负责服务运转
worker_processes 1; --- 设置worker进程数量
worker进程数量 <= 2*CPU核心数量
error_log /var/log/nginx/error.log warn; --- 定义错误日志保存路径
pid /var/run/nginx.pid; --- 定义进程文件保存路径
events {
worker_connections 1024; --- 定义每个worker进程并发处理能力
worker进程数量*worker进程并发连接数=nginx程序并发连接数 < 系统打开文件数
系统打开文件数: ulimit -a
open files (-n) 1024
}
http {
include /etc/nginx/mime.types; --- 扩展加载文件信息
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' --- 定义访问日志文件格式信息
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; --- 定义访问日志文件保存路径
sendfile on;
keepalive_timeout 65; --- 定义TCP长连接超时时间
include /etc/nginx/conf.d/*.conf; --- 扩展架构主机配置文件
}
nginx配置文件结构(组成部分)
1) 核心区域配置部分: 开头前几行配置
2) 事件区域配置部分: events { } 服务性能参数信息
3) 协议区域配置部分: http{ } 服务功能指令信息
4) 主机区域配置部分: server{ } 主机网站配置参数
5) location区域配置部分
6) if区域配置部分
扩展配置文件: /etc/nginx/conf.d/xxx.conf
网站主机配置文件
grep -Ev "#|^$" default.conf.bak >default.conf
cat /etc/nginx/conf.d/default.conf
server {
listen 80; --- 定义网站服务监听端口信息
server name localhost; --- 定义网站url域名信息
root /usr/share/nginx/html; --- 定义站点目录路径信息
index index.html index.htm; --- 定义默认首页文件信息
error_page 404 500 502 503 504 /50x.html; --- 网站错误页面优雅显示
}
配置文件配置规范
1. 响应区域模块花括号信息必须成对出现
2. 文件指定指令信息后面必须有分号结尾 (分号是英文)
3. 指令信息必须是合法指令
静态网站搭建过程
1) 搭建单一静态网站
第一步: 编写主机配置文件
cd /etc/nginx/
vim www.conf
server {
listen 80;
server_name www.test01.com;
root /html/www;
index index.html index.htm;
}
第二步: 创建站点目录
mkdir -p /html/www
第三步: 获取代码信息
cat index.html
<html>
<meta charset="utf-8">
<head>
<title></title>
</head>
<body>
</body>
</html>
第四步: 将nginx服务进行重启
systemctl restart nginx
2) 搭建多个静态网站
第一步: 编写配置文件
cd /etc/nginx/
vim www.conf
server {
listen 80;
server_name www.test01.com;
root /html/www;
index index.html index.htm;
}
vim bbs.conf
server {
listen 80;
server_name bbs.test02.com;
root /html/bbs;
index index.html index.htm;
}
vim blog.conf
server {
listen 80;
server_name blog.test03.com;
root /html/blog;
index index.html index.htm;
}
第二步: 创建站点目录
mkdir -p /html/{www,bbs,blog}
第三步: 获取网站代码信息
第四步: 重启服务
网站页面访问方式
1) 基于域名信息进行访问
2) 基于端口信息进行访问
3) 基于地址信息进行访问
1. 配置好相应主配置文件加载顺序
2. 配置好监听地址信息
常见问题: 访问域名信息和显示页面信息不符
网站访问原理
第一步: 将域名进行解析
www.XXXX.com ---> 10.0.0.7
blog.XXXX.com ---> 10.0.0.7
第二步: 向10.0.0.7主机发送HTTP报文信息(数据包)
数据包封装过程: 数据包解解封装过程:
应用层: HTTP报文信息 应用层: HOST: www.XXXX.com 默认显示blog页面信息
传输层: 端口信息 传输层: 80端口(server blog符合) 8080端口
网络层: 目标地址信息 网络层: 进行解封装
数据包封装过程: 数据包解解封装过程:
应用层: HTTP报文信息 应用层: HOST: 10.0.0.7 默认显示www网站页面信息
传输层: 端口信息 传输层: 80端口(server blog www bbs符合)
网络层: 目标地址信息 网络层: 进行解封装
第三步: 将不同网站站点目录信息进行显示
网站安全防护配置
1) 根据用户地址或网段信息进行隔离防护
第一步: 编写配置文件
vim www.conf
server {
listen 172.16.1.7:80;
server_name www.test01.com;
root /html/www;
index index.html index.htm;
location /sa {
allow 10.0.0.0/24; --- 白名单
deny all; --- 黑名单
}
}
第二步: 在站点目录下添加后台目录信息
cd /html/www
mkdir sa
echo 测试 > sa/test.html
第三步: 网页查看
错误状态码:
403 Forbidden --- 在服务端配置安全阻止策略, 阻止了响应地址主机访问
2) 基于用户访问进行安全控制
加班订餐: 网站页面订餐 任何人都可访问
加班调休: 网站页面休假 任何人都可访问
财务页面: 公司内部账目 只能财务人员 单独划分到一个vlan 10.0.0.0/24
实际配置
第一步: 环境搭建准备
mkdir /html/www/dingcan
echo "ding can pingtai" > dingcan/index.html
mkdir /html/www/caiwu
echo "cai wu qingkuang" > caiwu/index.html
第二步: 认证配置
server {
listen 80;
server_name www.caiwu.com;
root /html/www;
index index.html index.htm;
location /caiwu {
auth_basic "财务";
auth_basic_user_file /etc/nginx/htpasswd; --- 创建密文密码文件
}
location /sa {
allow 10.0.0.0/24;
deny all;
}
}
第三步: 创建密码文件
yum install -y httpd-tools
第四步: 创建密码文件并设置认证用户
htpasswd -bc /etc/nginx/htpasswd test test123
添加新的认证用户:
htpasswd -b /etc/nginx/htpasswd test01 test123
删除认证用户信息:
htpasswd -D /etc/nginx/htpasswd test01
认证密码文件权限改为600出现的异常说明
错误状态码信息:
500 Internal Server Error
1. 配置文件中指定信息不正确 路径信息/权限信息
2. 网站代码信息加载有bug
网站服务搭建存储服务
利用nginx搭建一个文件共享服务器
运维人员: 文档资源 存储服务部署文档/网站服务搭建部署文档 ---> /运维资料库
开发人员: 文档资源 数据存储架构文档/网站功能说明文档 ---> /开发资料库
网络人员: 文档资源 网站拓扑结构文档/网站网络设备配置文档 ---> /网络资料库
部署流程
第一步: 在站点目录中创建共享资源目录信息
mkdir /html/www/{运维资料库,开发资料库,网络资料库} -p
touch /html/www/运维资料库/监控服务部署文档.pdf
touch /html/www/开发资料库/数据结构说明文档.doc
touch /html/www/网络资料库/网络结构说明文档.jpg
第二步: 编写配置文件信息
vim /etc/nginx/conf.d/www.conf
server {
listen 80;
server_name www.test.com;
root /html/www;
index index.html index.htm;
autoindex on; --- 开启站点目录中不能存在首页文件
charset utf-8;
}
网站服务日志信息
服务错误日志: /var/log/nginx/error.log
Syntax: error_log file [level]; --- 定义错误日志保存路径和错误级别
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location
debug 调试级别 显示信息会最全
info 信息级别
notice 通知级别
warn 警告级别 错误信息不太严重 *****
error 错误级别 ***
crit 严重级别
alert 非常严重
emerg 灾难级别 显示日志信息较少
服务访问日志: /var/log/nginx/access.log
Syntax: log_format name [escape=default|json|none] string ...; --- 指定访问日志的格式
Default: log_format combined "...";
Context: http
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; access_log off; --- 指定访问日志的路径信息
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
$remote_addr --- 显示访问用户源IP地址信息
$remote_user --- 显示认证登陆用户名称信息 没有认证功能开启 会显示 -
$time_local --- 显示响应HTTP报文发送时间
$request --- 显示客户端HTTP请求行报文信息
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
$status --- 显示网站响应状态码信息
$body_bytes_sent --- 响应主体内容流量信息(字节表示)
$http_referer --- 和优化有关日志信息
$http_user_agent --- 识别客户端浏览软件信息
$http_x_forwarded_for --- 和反向代理负载均衡有关
网站服务状态模块配置
分析网站服务访问情况, 快速收集用户访问网站情况
location = /basic_status {
stub_status;
}
显示状态模块信息
在网址后面加上 /basic_status 如: www.test.com/basic_status
Active connections: 2
server accepts handled requests
2 2 1
Reading: 0 Writing: 1 Waiting: 1
Active connections; 网站并发访问连接数信息(实时统计)
accepts: 接收请求用户连接数量(累加值)
handled: 处理请求用户连接数量 (累加值)
requests: 发送请求报文数量信息(累加值)
Reading: 正在读取请求报文数量
Writing: 正在响应请求报文数量
Waiting: 有等待处理报文数量
以上页面需要需要由监控软件进行自动监控管理
网站服务location模块
location模块作用说明
根据不同uri信息, 进行不同处理
灵活调整站点目录
访问图片信息: /html/www/img/ test.jpg
访问视频信息: /html/www/av/ test.mp4
访问文档信息: /html/www/txt/ test.txt
配置文件中的信息
location ~ \.jpg$ {
root /html/www/img;
}
location ~ \.mp4$ {
root /html/www/av;
}
location ~ \.txt$ {
root /html/www/txt
}
Syntax: location [ = | ~ | ~* | ^~ ] uri { 对匹配uri进行哪些处理 }
location @name { ... }
Default: —
Context: server, location
= --- 进行uri信息精确匹配 例如: = /sa/ www.oldboy.com/sa/
~ --- 进行uri信息匹配(区分大小写匹配) 例如: ~ /sa/ www.oldboy.com/sa/ www.oldboy/sa/01/oldboy.html
~* --- 进行uri信息匹配(不区分大小写匹配) 例如: ~* /sa/ www.oldboy.com/sa/ www.oldboy.com/SA/
^~ --- 进行uri信息优先匹配, 不识别正则信息
指定站点目录:root 与 alias 的区别
root: 可以指定站点目录
配置信息
location ~ /sa/ {
root /html/www/;
}
www.oldboy.com/sa/ ---> /html/www/sa/首页文件
alias: 可以指定站点目录
配置信息
location ~ /sa/ {
alias /html/www/sa_new/;
}
www.oldboy.com/sa/ 页面信息 ---> /html/www/sa_new/页面
网站页面实现跳转功能
跳转方式
break: 将访问uri信息直接进行跳转改变, 不会重新再建立新的连接访问
last: 将访问uri信息进行跳转改变, 会让客户端重新建立新的访问, 从而匹配新的location
redirect 临时跳转(302), 不会叫跳转过程进行保存, 每次跳转都有服务端进行控制 ***
permanent: 永久跳转(301), 会将跳转过程保存在浏览器中
方法一: rewrite 指令
Syntax: rewrite regex(正则匹配信息) replacement(重写/跳转指定信息) [flag] 跳转方式;
Default: —
Context: server, location, if
实践配置过程
rewrite.conf
server {
listen 80;
server_name rewrite.oldboy.com;
root /html/rewrite;
location ~ ^/break/ {
rewrite ^/break/ /test/ break;
}
location ~ ^/last/ {
rewrite ^/last/ /test/ last;
}
location /test/ {
default_type application/json;
return 200 'ok info';
}
}
访问 http://rewrite.oldboy.com/break 显示页面是404页面
方法二: return 指令
作用
1. 主要实现url信息跳转
2. 主要实现固定uri信息跳转
return指令跳转测试
www.test.com/sa/test.jpg --> www.test.com/sa_new/test.jpg
配置信息
server {
listen 80;
server_name www.test.com;
location / {
root /html/www;
index index.html;
}
location ~ /sa/ {
return 302 http://www.oldboy.com/sa_new/oldboy.jpg;
}
}
跳转实际配置
案例一: 将uri信息进行跳转重新
用户访问网站uri信息 /abc/1.html 实际访问 /ccc/bbb/2.html
实现跳转过程:
http://rewrite.test.com/abc/1.html --> http://rewrite.test.com/ccc/bbb/2.html
环境准备:
cd /html/rewrite
mkdir ccc/bbb -p
echo ccc_bbb_2 >ccc/bbb/2.html
跳转配置:
vim /etc/nginx/conf.d/rewrite.conf
server {
listen 80;
server_name rewrite.oldboy.com;
root /html/rewrite;
location /abc {
#rewrite (.*) /ccc/bbb/2.html redirect;
return 302 /ccc/bbb/2.html;
}
}
案例二: 将uri信息进行跳转重新
用户访问 /2019/ccc/bbb/2.html 目录信息进行改变 /2020/ccc/bbb/2.html
实现跳转过程:
http://rewrite.test.com/2019/ccc/bbb/2.html --> http://rewrite.test.com/2020/ccc/bbb/2.html
环境准备:
cd /html/rewrite
mkdir 2020/ccc/bbb/ -p
echo 2020_2 >2020/ccc/bbb/2.html
跳转配置:
location /2019 {
rewrite ^/2019/(.*)$ /2020/$1 redirect;
}
案例三: 将uri信息进行跳转重写
用户访问 uri test-11-22-33.html 实际访问 /test/11/22/33/test_33.html
实现跳转:
http://rewrite.oldboy.com/oldboy-11-22-33.html --> http://rewrite.oldboy.com/oldboy/11/22/33/oldboy.html
环境准备:
cd /html/rewrite
mkdir oldboy/11/22/33/ -p
echo oldboy-11-22-33 > oldboy/11/22/33/oldboy.html
跳转配置:
location / {
rewrite ^/oldboy-(.*)-(.*)-(.*).html /oldboy/$1/$2/$3/oldboy.html redirect;
}