nginx

1.nginx的基本组件
  1. nginx的二进制文件
  2. nginx的配置文件/etc/nginx/conf.d/*.conf
  3. nginx的access日志
  4. nginx的error 日志
2.nginx的安装
yum install nginx -y	#安装nginx
rpm -ql nginx	#查看nginx的目录文件
cat /etc/nginx/nginx.conf	#nginx的配置文件
--------------------/etc/nginx/nginx.conf-------------------------
user  www;									# nginx进程是哪个用户来运行
worker_processes  2;						# 启动多少个worker进程
error_log  /var/log/nginx/error.log warn;	# 错误日志存在哪里
events {
    worker_connections  1024;				# worker最大连接数1024*worker_processes
}
http {	#HTTP模型
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;	#当nginx无法识别的文件时,默认为访问就下载
    #定义日志格式
    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;
    #tcp_nopush     on;
    keepalive_timeout  65;	#长连接(默认长连接65s)
    #gzip  on;	#压缩
    include /etc/nginx/conf.d/*.conf;	#包含该目录下的所有.conf文件
}
-------------------/etc/nginx/nginx.conf结束-----------------------
3.搭建一个网站
mkdir /code		#存放游戏路径
vim /etc/nginx/conf.d/game.conf
--------------------/etc/nginx/conf.d/game.com----------------------
server {
	listen 80;
	server_name game.com;
	
	location / {
		root /code;
		index index.html;
	}
}
--------------------/etc/nginx/conf.d/game.com结束-------------------
nginx -t	#检查语法错误
systemctl start nginx	#启动nginx

Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 game.com	#nginx的服务器的IP,与server_name

在浏览器中输入域名game.com即可访问。

4.nginx多个IP访问(很少)
mkdir -p /code/ip1	#创建两个网址
mkdir -p /code/ip2
echo "hello,10.7" > /code/ip1/index.html	#两个网址写入对应的IP
echo "hello,172.7" > /code/ip2/index.html
vim /etc/nginx/conf.d/ip.conf
------------------------/etc/nginx/conf.d/ip.conf-------------------------
server {
	listen 10.0.0.7:80;
	location / {
		root /code/ip1;
		index index.html;	
	}
	listen 172.16.1.7:80;
	location / {
		root /code/ip2;
		index index.html;
	}
}
------------------------/etc/nginx/conf.d/ip.conf结束----------------------
nginx -t
systemctl restart nginx
#测试
curl 10.0.0.7:80
curl 172.16.1.7:80
5.基于不同的端口访问(测试)
mkdir -p /code/port1
mkdir /code/port2
echo "8081" > /code/port1/index.html
echo "8082" > /code/port2/index.html
vim /etc/nginx/conf.d/port.conf
------------------------/etc/nginx/conf.d/port.conf------------------------
server {
	listen 8081;
	location / {
		root /code/port1;
		index index.html;
	}
	listen 8082;
	location / {
		root /code/port2;
		index index.html;
	}
}
------------------------/etc/nginx/conf.d/port.conf结束---------------------
nginx -t
systemctl reload nginx
#测试
curl 10.0.0.7:8081
curl 10.0.07:8082
6.基于不同的域名访问
mkdir -p /code/test1
mkdir /code/test2
echo "hello,test" > /code/test1/index.html
echo "test2" > /code/test2/index.html
vim /etc/nginx/conf.d/all.conf
------------------------/etc/nginx/conf.d/all.conf-------------------------
server {
	listen 80;
	server_name test1.com;
	location / {
		root /code/test1;
		index index.html;
	}
server {
	listen 80;
	server_name test2.com;
	location / {
		root /code/test2;
		index index.html;
	}

}
------------------------/etc/nginx/conf.d/all.conf结束----------------------
nginx -t
systemctl reload nginx	#加载nginx

在Windows的c:\windows\system32\drives\etc\hosts中添加下两条:

10.0.0.7 test1.com
10.0.0.7 test2.com

在Windows浏览器中分别输入域名test1.com与test2.com即可访问。
如果在Windows中配置了域名解析,但nginx中没有该域名,则会返回/etc/nginx/conf.d/目录下第一个.conf文件中第一个server。
在另外一台Linux系统访问:

vim /etc/hosts
-------------------------/etc/hosts----------------------------------------
10.0.0.7 test1.com
10.0.0.7 test2.com
-------------------------/etc/hosts结束-------------------------------------
curl test1.com
curl test2.com
7.autoindex模块的使用
#
mkdir -p /code/repo	#准备repo目录
rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/centos/ /code/repo/	#将阿里云的源同步到本地
vim /etc/nginx/conf.d/mirror.conf
-------------------------------/etc/nginx/conf.d/repo.conf---------------------
server {
	listen 80;
	server_name mirror.com;
	charset utf-8;	#中文正常显示
	root /code;
	autoindex on;	#转成目录结构显示
	location / {
		index index.html;
	}
	location /repo {
		autoindex_exact_siza off;	#显示大小为M
		autoindex_localtime on;		#上传时间为本地时间
	}
}
-------------------------------/etc/nginx/conf.d/repo.conf结束-----------------
nginx -t
systemctl restart nginx

在Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 mirror.com

在Windows的浏览器中输入域名mirror.com即可访问。

8.设置访问用户与密码
#给mirror.com的/repo添加用户密码认证。
vim /etc/nginx/conf.d/mirror.conf
-------------------------------/etc/nginx/conf.d/repo.conf--------------------
server {
	listen 80;
	server_name mirror.com;
	charset utf-8;
	root /code;
	autoindex on;
	location / {
		index index.html;
	}
	location /repo {
		autoindex_exact_size off;
		autoindex_localtime on;
		auth_basic "hello";		#输入用户名密码时候的提示
		auth_basic_user_file "/etc/nginx/auth_pass";	#用户名和密码的路径
	}
}
-------------------------------/etc/nginx/conf.d/repo.conf结束-----------------
yum install httpd-tools -y	#安装HTTP工具
htpdpasswd -cb /etc/nginx/auth_pass root 123456	#生成密码文件
nginx -t
systemctl reload nginx

在Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 mirror.com

在Windows的浏览器中输入域名mirror.com即可访问,当访问/repo时需要验证。

9.请求限制
mkdir -p /code/limit
echo "limit" > /code/limit/index.html
vim /etc/nginx/con.f/limit.conf
-------------------------/etc/nginx/con.f/limit.conf----------------------------
#定义了10M的内存空间,名称叫req_one,限制为每秒一个请求,针对来源的IP地址
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
server {
	listen 80;
	server_name limit.com;
	#请求超过1r/s,剩下的延时处理,超过burst数量则返回503
	limit_req zone=req_one burst=3 nodelay;
	location / {
		root /code/limit;
		index index.html;
	}
}
-------------------------/etc/nginx/con.f/limit.conf结束-------------------------
nginx -t
systemctl reload nginx

在Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 limit.com

在Windows的浏览器中输入域名limit.com即可访问,连续刷新即可验证。

10.连接限制
mkdir -p /code/limit	#创建目录并放入一个较大的文件
vim /etc/nginx/conf.d/limit.conf
-------------------------/etc/nginx/conf.d/limit.conf------------------
#请求限制:定义了一个10m内存空间,名称叫req_one 限制的速率是 每S 1个请求,针对的来源的IP地址
#limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;

#连接限制: 定义了一个10m内存空间,名称叫conn_od,针对的是来源的IP
limit_conn_zone $binary_remote_addr zone=conn_od:10m;
server {
	listen 80;
	server_name limit.com;
	limit_conn conn_od 1;	#一个IP限制为一个连接数
	limit_rate_after 100m;	#前100M不限速
	limit_rete 200k;	#限速为200k
	root /code/limit;
	autoindex on;
}
----------------------/etc/nginx/conf.d/limit.conf结束------------------

在Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 limit.com

在Windows的浏览器中输入域名limit.com即可访问,点击下载且同时只能下载一个。

11.综合案例

限制web服务器请求数处理为每秒一个,触发值为5;限制用户同时只能下载一个文件,同时下载两个时则提示“充值会员”,当下载超过100M时限速为500K。

mkdir -p /code/limit
vim /etc/nginx/conf.d/limit.conf
-------------------------/etc/nginx/conf.d/limit.conf------------------
#请求限制:定义了一个10m内存空间,名称叫req_one 限制的速率是 每S 1个请求,针对的来源的IP地址
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;

#连接限制: 定义了一个10m内存空间,名称叫conn_od,针对的是来源的IP
limit_conn_zone $binary_remote_addr zone=conn_od:10m;
server {
	listen 80;
	server_name limit.com;
	charset utf-8;
	limit_req zone=req_one burst=5 nodelay;
	limit_conn conn_od 1;	#一个IP限制为一个连接数
	limit_rate_after 100m;	#前100M不限速
	limit_rete 200k;	#限速为200k
	root /code;
	autoindex on;
	error_page 503 @err;
	location @err {
		default_type text/html;
		return 200 '联系管理员充值会员';
	}
}
----------------------/etc/nginx/conf.d/limit.conf结束------------------
nginx -t
systemctl reload nginx

在Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 limit.com

在Windows的浏览器中输入域名limit.com即可访问验证。

12.状态模块stub_status
mkdir /code	
vim /etc/nginx/conf.d/game.conf
--------------------/etc/nginx/conf.d/game.com----------------------
server {
	listen 80;
	server_name game.com;
	
	location / {
		root /code;
		index index.html;
	}
	#开启Nginx的状态监控
	location /status {
		stub_status;
	}
}
--------------------/etc/nginx/conf.d/game.com结束-------------------
nginx -t	#检查语法错误
systemctl start nginx	#启动nginx

Windows的c:\windows\system32\drives\etc\hosts中添加:

10.0.0.7 game.com	#nginx的服务器的IP,与server_name

在浏览器中输入域名game.com/status即可查看。

状态含义
Active connections当前活跃的连接数,包括waiting等待数
accepts已接收的总TCP连接数
handled已处理的TCP连接数
requests当前总HTTP请求数
Reading当前读取的请求头数量
writing当前响应的请求头数量
waiting当前等待请求的空闲客户端连接数
13.location的匹配规则与内部重定向
匹配符匹配规则优先级
=精准匹配1
^~以某个字符开头2
~区分大小写3
~*不区分大小写4
/通用匹配5
mkdir -p /code/location
vim /etc/nginx/con.d/location.conf
------------/etc/nginx/con.d/location.conf------------------
server {
	listen 80;
	server_name location.com;
	# 通用匹配,任何请求都会匹配到
	location / {
		root /code;
		index index.html;
	}
	# 精准匹配,必须请求的uri是/nginx_status
    location = /nginx_status {
        stub_status;
    }
    # 严格区分大小写,匹配以.php结尾的都走这个location    		xx.com/1.php
    location ~ \.php$ {
        default_type text/html;
        return 200 'php访问成功';
    }
    # 严格区分大小写,匹配以.jsp结尾的都走这个location 
    location ~ \.jsp$ {
        default_type text/html;
        return 200 'jsp访问成功';
    }
    # 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location
    location ~* \.(jpg|gif|png|js|css)$ {
        return 403;
    }
    # 不区分大小写匹配
    location ~* \.(sql|bak|tgz|tar.gz|.git)$ {
        deny all;
    }
    error_page 404 403 401 @err;
 	location @err {
         default_type text/html;
         return 200 '你可能是不小心走丢了。';
 	}
}
------------/etc/nginx/con.d/location.conf结束---------------
14.location路劲加 / 的区别
#不添加/,默认上/code/test目录下找index.html文件,如果没有 index.html则会查找/code/test文件
location /test {
    root /code;
    index index.html;
} 
#添加/,默认上/test目录下寻找index.html文件,如果没有index.html 则会直接返回403 
location /test/ {
    root /code;
}
15.nginx的日志
#log_format:定义日志格式
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;
变量名作用
$remote_addr记录客户端的IP
$remote_user记录客户端用户名
$time_local记录通用的本地时间
$time_iso8601记录ISO8601标准格式下的本地时间
$request记录请求的方法以及请求的http协议
$status记录请求状态码(用于定位错误信息)
$body_bytes_sent发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent发送给客户端的总字节数
$msec日志写入时间。单位为秒,精度是毫秒。
$http_referer记录从哪个页面链接访问过来的
$http_user_agent记录客户端浏览器相关信息
$http_x_forwarded_for记录客户端IP地址
$request_length请求的长度(包括请求行, 请求头和请求正文)。
$request_time请求花费的时间,单位为秒,精度毫秒

access_log 可以定义在 http、server、location

#每一个server都会定义一个access_log。为了区分网站的访问记录
http {
	access_log   /var/log/nginx/access.log main;
	server {
			# access_log /var/log/nginx/log.oldxu.com.log main;
		}
	#如果某个网站不想记录日志,则可以通过如下两种方式去实现?
	server {
		access_log off;
		#access_log /dev/null;
	}
}
#错误日志几乎是所有Nginx统一的一个位置。(全局,作用于所有的网站)
error_log  /var/log/nginx/error.log warn;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值