linux学习--week16--nginx-lnmp

2019-11-04  本文已影响0人  亮仔_c1b5

回顾及今日内容:
1.nginx功能扩展
1.1 用户访问网站流程
1.2 nginx内置变量
1.3 location规则
1.4 if
1.5 set自定义变量
1.6 rewrite 规则
1.7 root vs alias

  1. 负载均衡
    2.1 负载均衡与反向代理区别
    2.2nginx 7层负载
    2.3 nginx 7层负载
    回顾及今日内容:
    nginx
    web服务
    负载均衡(反向代理)
    nginx缓存
    web服务
    部署:yum 编译(增加第3方模块rtmp )
    配置:nginx.conf conf.d/xxxx.conf 含义
    Alphabetical index of directives
    Alphabetical index of variables

http://tengine.taobao.org/nginx_docs/cn/docs/dirindex.htm
l
模块:
log
core核心
日志
ssl https
rewirte
upstream
proxy
配置虚拟主机(server )
基于域名的虚拟主机 最常用
基于端口 后台 内部系统 + vpn
基于ip
nginx配置 认证 autoindex 状态
nginx location ~ ~*
nginx rewrite
nginx if
nginx root 与 alias 区别
负载均衡(反向代理)
负载均衡与反向代理区别
回顾osi7层模型
7层负载均衡 wireshark
4层负载均衡
nginx缓存
expires
proxy_cache
lnmp
php+mysql

1.nginx功能扩展

1.1 用户访问网站流程

域名--->ip DNS
ip与服务器 建立连接 3次握手
http请求豹纹
服务器网站进行处理
http响应豹纹
ip与服务器 断开连接

[root@web01 /etc/nginx]# wget  --debug www.baidu.com
DEBUG output created by Wget 1.14 on linux-gnu.

URI encoding = ‘UTF-8’
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
--2019-11-03 22:38:28--  http://www.baidu.com/
#DNS解析过程
Resolving www.baidu.com (www.baidu.com)... 61.135.169.121, 61.135.169.125
Caching www.baidu.com => 61.135.169.121 61.135.169.125
#Connecting 与网站建立连接
Connecting to www.baidu.com (www.baidu.com)|61.135.169.121|:80... connected.
Created socket 3.
Releasing 0x00000000025849a0 (new refcount 1).
#http 请求豹纹 request
---request begin---
#请求方法 $method GET/POST/HEAD(只显示响应头)
GET / HTTP/1.1   #http请求报文 起始行 $request
#$request_uri 请求中的uri
User-Agent: Wget/1.14 (linux-gnu) #用户浏览器 $http_user_agent
Accept: */*
Host: www.baidu.com #访问的域名或ip  $host
Connection: Keep-Alive
#空行 POST的时候 空行下面是POST的内容
---request end---
#http 请求已经发送 ,等待响应
HTTP request sent, awaiting response... 
#http响应豹纹开始 response
---response begin---
HTTP/1.1 200 OK    # $status
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2381
Content-Type: text/html
Date: Sun, 03 Nov 2019 14:38:28 GMT
Etag: "588604c4-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:32 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

---response end---
200 OK
cdm: 1 2 3 4 5 6 7 8
Stored cookie baidu.com -1 (ANY) / <permanent> <insecure> [expiry 2019-11-04 22:38:28] BDORZ 27315
Registered socket 3 for persistent reuse.
#httpkeepalive 长链接 keepalive_timeout 65;
Length: 2381 (2.3K) [text/html]
Saving to: ‘index.html’

100%[====================================================================>] 2,381       --.-K/s   in 0.003s  

2019-11-03 22:38:28 (864 KB/s) - ‘index.html’ saved [2381/2381]

1.2 nginx内置变量

http权威指南

变量名称 含义
$method 请求方法GET/POST/HEAD
$request_uri 请求中的URI部分
$request 请求中的起始行
$http_user_agent 客户端
$host 用户请求的域名
$status 状态码
$http_referer 用户从哪里跳转过来的

1.3 location规则

语法格式:
默认值:
上下文(功能可以放在哪里): server , location
location规则 解释
location / {} 默认规则 其他的location都不匹配的时候 找/ 默认规则
location /doc/ {} www.oldboyedu.com/doc/oldboy.txt www.oldboyedu.com/hsw/doc/wu01.mp4
location ~ xxx {} 可以使用正则,区分大小写
location ~* xxx {} 可以使用正则,不区分大小写
location ^~ xxx {} 不匹配正则,优先匹配
location = xxx {} 精确匹配
[root@web01 ~]# cat /etc/nginx/conf.d/01-status.conf
#81
server {
listen 81;
server_name status.oldboy.com;
root /html/www;
index index.html;
location / {
return 200 "/ default\n";
}
location /doc/ {
return 200 "/doc/\n" ;
}
location ~* "\.(png|jpeg|jpg|img|bmp)$" {
return 200 "~* re 不区分大小写 图片 \n" ;
}
}
[root@web01 ~]# curl 10.0.0.7:81/oldboy/oldboy.html
/ default
[root@web01 ~]# curl 10.0.0.7:81/doc/oldboy.html
/doc/
[root@web01 ~]# curl 10.0.0.7:81/lidao/oldwang.png
~* re 不区分大小写 图片
[root@web01 ~]#
[root@web01 ~]#
[root@web01 ~]# curl 10.0.0.7:81/doc/oldboy.png
~* re 不区分大小写 图片

1.4 if

if location
位置 server , location server , location
功能 配合nginx内置变量/普通变量 进行匹配 匹配请求uri
条件会更多 if中可以取反 if ( $http_user_agent ~* "android | iso" ) {移动端网站}
if ( $http_referer !~* "www.baidu.com|www.google.com") {return 403;} 条件只有
location /
location /xxx
location ~*

www.jd.com www.oldboyedu.com
根据用户客户端不同访问不同网站

1.5 set自定义变量

Syntax: set $variable value
Default:
Context: server , location , if
[root@web01 ~]# #想在日志里面 显示用户请求信息
http://oldboyedu.com/uri
[root@web01 ~]# #
$scheme://$host$request_uri
[root@web01 ~]# egrep -v '^$|#' /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user
[$time_local] "$request" '
'$status $body_bytes_sent
"$http_referer" '
'"$http_user_agent"
"$http_x_forwarded_for" $url';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /html/www;
set $url $scheme://$host$request_uri;
if ($http_user_agent ~* "chrome|msie" ) {
return 200 "正在访问pc端\n";
}
if ($http_user_agent ~* "android|ios" ) {
return 200 "正在访问移动端\n";
}
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

1.6 rewrite 规则

Syntax: rewrite regex replacement [flag]
Default:
Context: server , location , if
rewrite regex replacement [flag];
rewirte 正则(匹配uri) 替换为什么 标记;
#用户访问oldboyedu.com 自动跳转为 www.oldboyedu.com
rewrite (^.*) http://www.oldboyedu.com/$1
permenant; #301 302
sed -r 's#(xxx)#\1#g'
#如果用户的客户端是 android或ios 则把用户跳转到
m.oldboyedu.com
#eg:android或ios
#www.oldboyedu.com/oldboy.php ---->
m.oldboyedu.com/oldboy.php
if ($http_user_agent ~* "android|ios") {
rewrite (^.*) http://m.oldboyedu.com/$1 permenant;
}
原始URL: http://127.0.0.1:8914/batch_no/11122asbc.jpeg
连接实现跳转到
目标:http://127.0.0.1:8914/email_open_check?
batch_no=11122asbc,这个咋实现?
分析规律
11122asbc.jpeg文件不同的文件实现连接
http://127.0.0.1:8914/email_open_check?batch_no=文件名
字
通过正则 取出url中文件的名字 在后面使用 $1 引用
rewrite ^/batch_no/([0-9A-Za-Z]+)\.jpeg
http://127.0.0.1:8914/email_open_check?batch_no=$1
permenant;
sed -r 's#xxx(.*)ooo#\1#g'
#用户浏览器类型是android 并且 用户ip范围是10.0.xx.xxx 执行
rewrite规则
if () {
if () {
}
}
##标记法
set $flag 0; 设置变量 $flag 值 0;
if ( $remote_addr ~ "^10\.0\."){
set $flag "${flag}1";
#set $flag "01"; $flag 01
#如果 ip符合规则 则 $flag的内容是01
}
if ($http_user_agent ~* "android"){ #如果用户的
客户端是android
set $flag "${flag}2";
#set $flag "012";
# set $flag 012 $flag的内容012
}
if ($flag = "012"){
return 200;
}

1.7 root vs alias

root alias
功能 指定站点目录 给指定的uri做别名
位置 http server location if in location location
eg
#
location /oldboy {
root /html/www/lidao;
}
#
location /alex {
alias /edu/bbs;
}
#root 站点目录
curl oldboyedu.com/oldboy/index.html ----
>/html/www/lidao/oldboy/index.html
#alias uri指定别名
curl oldboyedu.com/alex/alex.jpg ---->
/edu/bbs/alex.jpg
[root@web01 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See
/usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user
[$time_local] "$request" '
'$status $body_bytes_sent
"$http_referer" '
'"$http_user_agent"
"$http_x_forwarded_for" $document_root';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the
/etc/nginx/conf.d directory.
# See
http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
#include /etc/nginx/conf.d/*.conf;
server {
listen 80 ;
root /html/www;
location /alex/ {
alias /edu/av/;
}
location / {
index index.html;
}
}
}
[root@web01 ~]# curl 10.0.0.7/alex/index.html
edu av
10.0.0.7 - - [03/Nov/2019:15:51:33 +0800] "GET
/alex/index.html HTTP/1.1" 200 7 "-" "curl/7.29.0" "-"
/edu/av/
[root@web01 ~]# curl 10.0.0.7/index.html
web01
10.0.0.7 - - [03/Nov/2019:15:51:49 +0800] "GET
/index.html HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
/html/www

2. 负载均衡

lb01 yum install nginx -y
web01 nginx web
web02 nginx web
windows wireshark

2.1 负载均衡与反向代理区别

负载均衡 反向代理
共同 用户请求 负载均衡 请求发给后端web服务器处理 处理完成最后返回给用户 用户请求 负载均衡 请求发给后端web服务器处理 处理完成最后返回给用户
区别 处理用户请求的时候 转发 处理完成发回给用户 用户请求到达反向代理 反向代理代替用户进行请求 代理
image.png
应用层 第7层 各种协议 http https
表示层 用户请求 负载均衡 请求发给后端web服务器处理 处理完成最后返回给用户
会话层 处理用户请求的时候 转发 处理完成发回给用户
传输层 4层 tcp/udp 端口号
网络层 3层 ip
数据链路层 2层 mac地址
物理层 物理层01101010101

2.2nginx 7层负载

#准备 nginx
lb01 10.0.0.5
web01 10.0.0.7
web02 10.0.0.8
#
curl 10.0.0.[7-8]/oldboy.html
web01 www
web02 www
curl 10.0.0.[7-8]/oldboy.html
web01 blog
web02 blog
#
[root@web01 ~]# mkdir -p /html/{www,blog}
[root@web01 ~]# for n in www blog ; do echo
`hostname;hostname -I` $n >/html/$n/oldboy.html
;done
[root@web01 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user
[$time_local] "$request" '
'$status $body_bytes_sent
"$http_referer" '
'"$http_user_agent"
"$http_x_forwarded_for" $document_root';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80 ;
server_name www.oldboy.com;
root /html/www;
location / {
index index.html;
}
}
server {
listen 80 ;
server_name blog.oldboy.com;
root /html/blog;
location / {
index index.html;
}
}
}
#
[root@lb01 ~]# curl 10.0.0.[7-8]/oldboy.html
[1/2]: 10.0.0.7/oldboy.html --> <stdout>
--_curl_--10.0.0.7/oldboy.html
web01 10.0.0.7 172.16.1.7 www
[2/2]: 10.0.0.8/oldboy.html --> <stdout>
--_curl_--10.0.0.8/oldboy.html
web02 10.0.0.8 172.16.1.8 www
[root@lb01 ~]# curl -H Host:blog.oldboy.com 10.0.0.
[7-8]/oldboy.html
[1/2]: 10.0.0.7/oldboy.html --> <stdout>
--_curl_--10.0.0.7/oldboy.html
web01 10.0.0.7 172.16.1.7 blog
[2/2]: 10.0.0.8/oldboy.html --> <stdout>
--_curl_--10.0.0.8/oldboy.html
web02 10.0.0.8 172.16.1.8 blog
[root@lb01 ~]#
[root@lb01 ~]# curl -v 10.0.0.7/oldboy.html
* About to connect() to 10.0.0.7 port 80 (#0)
* Trying 10.0.0.7...
* Connected to 10.0.0.7 (10.0.0.7) port 80 (#0)
> GET /oldboy.html HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 10.0.0.7
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.12.2
< Date: Sun, 03 Nov 2019 09:14:10 GMT
< Content-Type: text/html
< Content-Length: 30
< Last-Modified: Sun, 03 Nov 2019 09:13:22 GMT
< Connection: keep-alive
< ETag: "5dbe9a32-1e"
< Accept-Ranges: bytes
<
web01 10.0.0.7 172.16.1.7 www
* Connection #0 to host 10.0.0.7 left intact
[root@lb01 ~]#
[root@lb01 ~]# curl -v -H Host:blog.oldboy.com
10.0.0.7/oldboy.html
* About to connect() to 10.0.0.7 port 80 (#0)
* Trying 10.0.0.7...
* Connected to 10.0.0.7 (10.0.0.7) port 80 (#0)
> GET /oldboy.html HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> Host:blog.oldboy.com
>
< HTTP/1.1 200 OK
< Server: nginx/1.12.2
< Date: Sun, 03 Nov 2019 09:14:46 GMT
< Content-Type: text/html
< Content-Length: 31
< Last-Modified: Sun, 03 Nov 2019 09:13:22 GMT
< Connection: keep-alive
< ETag: "5dbe9a32-1f"
< Accept-Ranges: bytes
<
web01 10.0.0.7 172.16.1.7 blog
* Connection #0 to host 10.0.0.7 left intact

2.3 nginx 7层负载

http {
upstream web_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name www.oldboy.com;
location / {
proxy_pass http://web_pools;
}
}
}
[root@lb01 ~]# curl 10.0.0.5/oldboy.html
web01 10.0.0.7 172.16.1.7 www
[root@lb01 ~]# curl 10.0.0.5/oldboy.html
web02 10.0.0.8 172.16.1.8 www
[root@lb01 ~]# curl 10.0.0.5/oldboy.html
web01 10.0.0.7 172.16.1.7 www
[root@lb01 ~]# curl 10.0.0.5/oldboy.html
web02 10.0.0.8 172.16.1.8 www
[root@lb01 ~]# curl 10.0.0.5/oldboy.html
web01 10.0.0.7 172.16.1.7 www
[root@lb01 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream web_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
}
server {
listen 80;
server_name www.oldboy.com;
location / {
proxy_pass http://web_pools;
proxy_set_header Host $host;
#修改 反向代理 向后端 服务器 请求的请求头
}
}
server {
listen 80;
server_name blog.oldboy.com;
location / {
proxy_pass http://web_pools;
proxy_set_header Host $host;
}
}
}
image.png
image.png

4层负载均衡
nginx缓存
expires
proxy_cache
lnmp
php+mysql

上一篇 下一篇

猜你喜欢

热点阅读