标签:apr 场景 windows 配置 区分 reading Stub ring 规则
#虚拟主机配置方式:
1.基于多IP的方式
2.基于多端口的方式
3.基于多域名的方式
[root@web02 /etc/nginx/conf.d]# vim mali.conf
server {
listen 10.0.0.8:80;
server_name localhost;
location / {
root /code/zhiwu;
index index.html;
}
}
[root@web02 /etc/nginx/conf.d]# vim tank.conf
server {
listen 172.16.1.8:80;
server_name localhost;
location / {
root /code/tank;
index index.html;
}
}
[root@web02 /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web02 /etc/nginx/conf.d]# systemctl restart nginx
[root@web02 /etc/nginx/conf.d]# cat mali.conf
server {
listen 80;
server_name localhost;
location / {
root /code/zhiwu;
index index.html;
}
}
[root@web02 /etc/nginx/conf.d]# cat tank.conf
server {
listen 81;
server_name localhost;
location / {
root /code/tank;
index index.html;
}
}
[root@web02 /etc/nginx/conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web02 /etc/nginx/conf.d]# systemctl restart nginx
1.访问 http://10.0.0.8:80
2.访问 http://10.0.0.8:81
[root@web02 /etc/nginx/conf.d]# vim mali.conf
server {
listen 80;
server_name www.mali.com;
location / {
root /code/zhiwu;
index index.html;
}
}
[root@web02 /etc/nginx/conf.d]# vim tank.conf
server {
listen 80;
server_name www.tank.com;
location / {
root /code/tank;
index index.html;
}
}
C:\Windows\System32\drivers\etc\hosts
10.0.0.8 www.mali.com
10.0.0.8 www.tank.com
[root@web02 /etc/nginx/conf.d]# vim mali.conf
server {
listen 80;
server_name www.mali.com;
access_log /var/log/nginx/www.mali.com.log main;
location / {
root /code/zhiwu;
index index.html;
}
}
[root@web02 /etc/nginx/conf.d]# vim tank.conf
server {
listen 80;
server_name www.tank.com;
access_log /var/log/nginx/www.tank.com.log main;
location / {
root /code/tank;
index index.html;
}
}
Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义格式。
#配置语法: 包括: error.log access.log
#指定格式 日志格式名称 日志格式 日志内容
Syntax: log_format name [escape=default|json] string ...;
Default: log_format combined "...";
Context: http
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 # 记录通用的本地时间
$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 # 请求花费的时间,单位为秒,精度毫秒
# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。
[root@web02 ~]# vim /etc/logrotate.d/nginx
#指定切割的日志
/var/log/nginx/*.log {
#每天切割一次
daily
#忽略丢失的日志
missingok
#日志的保留时间
rotate 52
#日志文件压缩
compress
#延时压缩
delaycompress
#忽略空文件
not if empty
#指定日志文件权限
create 640 nginx adm
#开启脚本
shared scripts
#脚本内容
postrotate
#判断nginx是否启动
if [ -f /var/run/nginx.pid ]; then
#生成新的nginx访问日志
kill -USR1 `cat /var/run/nginx.pid`
fi
#结束脚本
endscript
}
该ngx_http_autoindex_module模块处理以斜杠字符(‘ /‘)结尾的请求,生成目录列表。通常,ngx_http_autoindex_module当ngx_http_index_module模块找不到索引文件时,会将请求传递给模块 。
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
[root@web02 /etc/nginx/conf.d]# vim mali.conf
server {
listen 80;
server_name www.mali.com;
access_log /var/log/nginx/www.mali.com.log json;
location / {
root /code/zhiwu;
index index.html;
}
location /download {
root /code;
autoindex on;
index index.html;
}
}
#显示文件字节大小 配置 on 显示字节 配置 off 显示方便读取的大小 K/M/G
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location
#显示时间,如果是off,时间与真实时间相差8小时,如果是on,是真实时间
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location
#字符集问题
charset utf-8;
[root@web02 /etc/nginx/conf.d]# vim mali.conf
server {
listen 80;
server_name www.mali.com;
charset utf-8;
access_log /var/log/nginx/www.mali.com.log json;
location / {
root /code/zhiwu;
index index.html;
}
location /download {
root /code;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html;
}
}
#允许访问的语法
Syntax: allow address | all;
Default: —
Context: http, server, location, limit_except
#拒绝访问的语法
Syntax: deny address | all;
Default: —
Context: http, server, location, limit_except
#要求允许10.0.0.1可以访问我的/download页面,其他网站不允许
[root@web02 /etc/nginx/conf.d]# cat mali.conf
server {
listen 80;
server_name www.mali.com;
charset utf-8;
access_log /var/log/nginx/www.mali.com.log json;
location / {
root /code/zhiwu;
index index.html;
}
location /download {
root /code;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html;
allow 10.0.0.1;
deny all;
}
}
#要求:10.0.0.1不能访问我的/download,其他网站都可以访问
[root@web02 /etc/nginx/conf.d]# cat mali.conf
server {
listen 80;
server_name www.mali.com;
charset utf-8;
access_log /var/log/nginx/www.mali.com.log json;
location / {
root /code/zhiwu;
index index.html;
}
location /download {
root /code;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html;
deny 10.0.0.1;
allow all;
}
}
#all的配置不管是允许还是拒绝,都一定配置在最后
#要求:允许10.0.0.0网段访问我的/download,拒绝其他网段
[root@web02 /etc/nginx/conf.d]# cat mali.conf
server {
listen 80;
server_name www.mali.com;
charset utf-8;
access_log /var/log/nginx/www.mali.com.log json;
location / {
root /code/zhiwu;
index index.html;
}
location /download {
root /code;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html;
allow 10.0.0.0/24;
deny all;
}
}
#要求:访问www.mali.com,出现游戏界面,访问www.mali.com/download,出现目录页面,且download页面只允许10.0.0.3访问
[root@web02 /etc/nginx/conf.d]# cat mali.conf
server {
listen 80;
server_name www.mali.com;
charset utf-8;
access_log /var/log/nginx/www.mali.com.log json;
location / {
root /code/zhiwu;
index index.html;
}
location /download {
root /code;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html;
allow 10.0.0.3;
deny all;
}
}
Syntax: autoindex_exact_size off;
Syntax: autoindex_localtime on;
Syntax: auth_basic string | off;
Syntax: auth_basic_user_file file;
Syntax: stub_status;
Syntax: limit_conn_zone key zone=name:size;
# limit_conn_zone $remote_addr zone=conn_zone:1m;
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
# limit_conn_zone $remote_addr zone=conn_zone:1m;
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
# limit_req_zone $remote_addr zone=req_zone:1m rate=1r/s;
# ngx_http_autoindex_module
[root@web02 /etc/nginx/conf.d]# vim test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
}
}
# 显示文件大小,使用off
autoindex_exact_size off;
# 显示确切文件修改时间
autoindex_localtime on;
# ngx_http_access_module
[root@web02 /etc/nginx/conf.d]# vim test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
#allow 10.0.0.0/24;
allow 10.0.0.1;
deny all;
}
}
# 开启认证控制,没有任何作用就是为了开启
Syntax: auth_basic string | off;
Default: auth_basic off;
Context: http, server, location, limit_except
# 指定用户认证的文件
Syntax: auth_basic_user_file file;
Default: —
Context: http, server, location, limit_except
htpasswd
#建立和更新存储用户名、密码的文本文件, 用于对HTTP用户的basic认证。
参数:
-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-n 不更新passwordfile,直接显示密码
-m 使用MD5加密(默认)
-d 使用CRYPT加密(默认)
-p 使用普通文本格式的密码
-s 使用SHA加密
-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-D 删除指定的用户
htpasswd -bc .access username password
#在当前目录生成.access文件,用户名username,密码:password,默认采用MD5加密方式。
htpasswd -b .access test 123456
#在原有密码文件中增加下一个用户
htpasswd -nb test 123456
#不更新.access文件,只在屏幕上输出用户名和经过加密后的密码。
htpasswd -D .access test
#利用htpasswd命令删除用户名和密码
# 生成密码文件
[root@web02 /etc/nginx/conf.d]# htpasswd -c /etc/nginx/auth_basic lhd
New password:
Re-type new password:
Adding password for user lhd
# 生成密码,在命令行输入密码
[root@web02 /etc/nginx/conf.d]# htpasswd -bc /etc/nginx/auth_basic lhd linux
Adding password for user lhd
# 查看
[root@web02 /etc/nginx/conf.d]# vim /etc/nginx/auth_basic
lhd:$apr1$JmblF9to$jDnvQn1w7oETPYyvaL2OG.
# 不添加-c参数可以添加多个用户
[root@web02 /etc/nginx/conf.d]# htpasswd /etc/nginx/auth_basic lhd
[root@web02 /etc/nginx/conf.d]# cat test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "输入用户名和密码";
auth_basic_user_file /etc/nginx/auth_basic;
}
}
Syntax: stub_status;
Default: —
Context: server, location
[root@web02 /etc/nginx/conf.d]# cat test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "输入用户名和密码";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /status {
stub_status;
}
}
# 访问 http://www.test.com/status
# 返回内容
Active connections: 2
server accepts handled requests
2 2 1
Reading: 0 Writing: 1 Waiting: 1
# nginx七种状态
Active connections #活跃的连接数
accepts #接受的TCP连接数
handled #已处理的TCP连接数
requests #请求数
Reading #读取的请求头的数量
Writing #响应的请求头的数量
Waiting #等待的请求数量
# 可以用作监控日PV
[root@web02 /etc/nginx/conf.d]# curl -s http://www.test.com/status | awk ‘NR==3 {print $3}‘
# ngx_http_limit_conn_module
# 设置限制的空间
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
limit_conn_zone #调用限制模块
key #存储的内容
zone= #空间
name: #空间的名字
size; #空间的大小
# 调用空间
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
limit_conn #调用空间
zone #空间名字
number; #同一个信息可以保存的次数
[root@web02 /etc/nginx/conf.d]# cat test.conf
# limit_conn_zone $remote_addr zone=conn_zone:1m;
server {
listen 80;
server_name www.test.com;
# limit_conn conn_zone 1;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "输入用户名和密码";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /status {
stub_status;
}
}
# 设置请求限制的空间
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
limit_req_zone #调用模块
key #空间存储的内容
zone= #指定空间
name: #空间的名字
size #空间的大小
rate=rate; #读写速率
# 调用空间
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
limit_req #调用空间
zone=name #指定空间名字
[burst=number] #扩展
[nodelay | delay=number]; #延时
[root@web02 /etc/nginx/conf.d]# cat test.conf
# limit_conn_zone $remote_addr zone=conn_zone:1m;
# limit_req_zone $remote_addr zone=req_zone:1m rate=1r/s;
server {
listen 80;
server_name www.test.com;
limit_conn conn_zone 1;
limit_req zone=req_zone;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "输入用户名和密码";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /status {
stub_status;
}
}
[root@web02 /etc/nginx/conf.d]# ab -n 200 -c 2 http://www.test.com/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.test.com (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software: nginx/1.18.0
Server Hostname: www.test.com
Server Port: 80
Document Path: /
Document Length: 13 bytes
Concurrency Level: 2
Time taken for tests: 0.036 seconds
Complete requests: 200
Failed requests: 199
(Connect: 0, Receive: 0, Length: 199, Exceptions: 0)
Write errors: 0
Non-2xx responses: 199
Total transferred: 73674 bytes
HTML transferred: 39216 bytes
Requests per second: 5492.24 [#/sec] (mean)
Time per request: 0.364 [ms] (mean)
Time per request: 0.182 [ms] (mean, across all concurrent requests)
Transfer rate: 1975.76 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 12
Processing: 0 0 0.6 0 4
Waiting: 0 0 0.5 0 4
Total: 0 0 1.0 0 12
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 4
99% 4
100% 12 (longest request)
[root@web02 /etc/nginx/conf.d]#
使用Nginx Location可以控制访问网站的路径,但一个server可以有多个location配置, 多个location的优先级该如何区分
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 3 |
/ | 通用匹配,任何请求都会匹配到 | 4 |
[root@web02 /etc/nginx/conf.d]# cat location.conf
server {
listen 80;
server_name www.location.com;
#location / {
# default_type text/html;
# return 200 "location /";
#}
location =/ {
default_type text/html;
return 200 "location =/";
}
location ~* / {
default_type text/html;
return 200 "location ~* /";
}
location ^~ / {
default_type text/html;
return 200 "location ^~";
}
}
# 通用匹配,任何请求都会匹配到
location / {
...
}
# 严格区分大小写,匹配以.php结尾的都走这个location
location ~ \.php$ {
...
}
# 严格区分大小写,匹配以.jsp结尾的都走这个location
location ~ \.jsp$ {
...
}
# 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css结尾的都走这条location
location ~* .*\.(jpg|gif|png|js|css)$ {
...
}
# 不区分大小写匹配
location ~* "\.(sql|bak|tgz|tar.gz|.git)$" {
...
}
LNMP是一套技术的组合,L=Linux、N=Nginx、M~=MySQL、P~=PHP
不仅仅包含这些,还有redis/ELK/zabbix/git/jenkins/kafka
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
1.静态请求:请求静态文件的请求
静态文件:
1)上传时什么样子,查看时就是什么样子
2)html的页面都是静态的
2.动态请求:请求动态内容,带参数的请求
1)服务器上并不是真实存在的,需要都数据库等服务上去获取数据,组成的页面
当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理,具体如下图所示
1.浏览器输入域名,浏览器拿着域名取DNS服务器解析
2.DNS服务器解析域名为IP
3.浏览器去请求该IP对应的服务器
4.浏览器请求nginx
5.nginx判断请求是动态请求还是静态请求
# 静态请求
location / {
root /code;
index index.html;
}
# 动态请求
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
... ...
}
6.如果是静态请求,nginx直接返回内容
7.如果是动态内容,nginx会通过fastcgi协议找php-fpm管理进程
8.php-fpm管理进程会去下发工作给wrapper工作进程
9.wrapper工作进程判断是不是php文件
10.如果只是php文件,可以直接解析然后返回结果
11.如果还需要读取数据库,wrapper进程会去读取数据库数据,然后返回数据
[root@web01 /package]# tar xf php.tar.gz
[root@web01 /package]# yum localinstall -y *.rpm
1.恢复快照
2.三台机器使用官方源安装
3.搭建小游戏
4.使用模块搭建目录索引页面,可以下载文件
# 配置官方源
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[root@web02 ~]# vim /etc/yum.repos.d/nginx.repo
[root@web03 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
# 安装Nginx
[root@web01 ~]# yum install -y nginx
[root@web02 ~]# yum install -y nginx
[root@web03 ~]# yum install -y nginx
# 修改Nginx用户
[root@web01 ~]# groupadd www -g 666 && useradd www -u 666 -g 666
[root@web02 ~]# groupadd www -g 666 && useradd www -u 666 -g 666
[root@web03 ~]# groupadd www -g 666 && useradd www -u 666 -g 666
[root@web01 ~]# vim /etc/nginx/nginx.conf
[root@web02 ~]# vim /etc/nginx/nginx.conf
[root@web03 ~]# vim /etc/nginx/nginx.conf
user www;
# 创建游戏目录并授权
[root@web01 ~]# mkdir /code/{games,download}
[root@web01 ~]# chown -R www.www /code
# 上传小游戏代码
[root@web01 /code/download]# rz html5-mario.zip tank.zip tuixiangzi.zip
# 解压代码包
[root@web01 /code]# unzip -d ./games/ html5-mario.zip
[root@web01 /code]# unzip -d ./games/ tank.zip
[root@web01 /code]# unzip -d ./games/ tuixiangzi.zip
# 自选小游戏
[root@web01 ~]# vim /etc/nginx/conf.d/games.conf
server {
listen 80;
server_name localhost;
charset utf-8;
access_log /var/log/nginx/access.log main;
location / {
root /code/games;
autoindex on;
index index.html;
}
}
# 配置games的server模块
[root@web01 ~]# vim /etc/nginx/conf.d/games.conf
server {
listen 80;
server_name localhost;
charset utf-8;
access_log /var/log/nginx/access.log main;
location / {
root /code;
autoindex on;
index index.html;
}
location /download {
root /code;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
index index.html;
}
}
#浏览器查看
http://10.0.0.7/games/
http://10.0.0.7/download/
标签:apr 场景 windows 配置 区分 reading Stub ring 规则
原文地址:https://www.cnblogs.com/xuexiaosong/p/13589942.html