网站服务器 - nginx

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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值