Nginx可以作为静态web服务器
Nginx在实际运维中,用到最多的地方是反向代理服务器,或负载均衡服务器
(二)ngx_http_proxy_module模块详解
Nginx在实际运维中,用到最多的地方是反向代理服务器,或负载均衡服务器
Nginx使用proxy_pass和fastcgi_pass实现单台主机的动静分离
(PHP以daemon方式运行)
location
~* \.html$ {
proxy_pass http://192.168.23.11:8080;
}
location
~* \.php$ {
fastcgi_pass
192.168.23.12:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /app/php/
$fastcgi_script_name;
include fastcgi_params;
}
Nginx使用proxy_pass和fastcgi_pass实现单台主机的动静分离
(PHP以httpd模块方式运行)
location
~* \.html$ {
proxy_pass http://192.168.23.11:8080;
}
location
~* \.php$ {
proxy_pass http://192.168.23.12:8080;
}
解决内网服务器的日志中记录的客户端IP地址为反代的IP
(如果代理前端有CDN,需要在CDN上配置X-Forwarded-For)
通常的情况下,对内网中的web服务器的日志进行分析是非常关键的,但是基于前端调度器调度之后,所有的web服务器的日志信息中客户端
IP地址都变成了调度器的内网
IP地址。那么在这种情况下,需要使用Nginx的一个指令:proxy_set_header 将客户端的
IP地址获得后,传递给内网的web服务器,让内网的web服务器的日志的客户端
IP地址为真实的客户端
IP地址
proxy_set_header X-Forwarded-For $remote_addr;
LogFormat
"%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
add_header X-
cache $uptream_cache_status
如何使用反向proxy的cache机制
(与fastcgi的缓存类似,先在server中定义再调用)
# proxy定义缓存的方式与fastcgi的方式一样
1:在http段中先定义缓存,其中/var/cache/nginx/proxy_cache为缓存在磁盘文件的路径,
1:
2:
2表示存储在磁盘上的文件使用三个层次的目录结构,在内存中的keys缓存名为proxy_cache,大小为
10M,磁盘最大缓存为
10G。缓存目录/var/cache/nginx/proxy_cache需要提前创建好
http{
proxy_cache_path /var/cache/nginx/proxy_cache levels=
1:
2:
2 keys_zone=proxy_cache:
100m max_size=
10g;
}
2:调用缓存功能写在
location中调用
location / {
proxy_pass http:
index
index.html
index.htm;
# 指定的key的名称
proxy_cache_key $request_uri;
# 调用缓存
proxy_cache proxy_cache;
# 指定不同的状态码的缓存时长
proxy_cache_valid
200
302
10m;
proxy_cache_valid
301
1h;
proxy_cache_valid
any
1m;
}
(三)ngx_http_headers_module模块详解
这个模块可以给响应报文添加自定义首部
add_header X-Server $server_name
expires
24h
add_header X-
cache $uptream_cache_status
(四)ngx_stream_upstream_module模块详解
(做实验的时候,请关闭cache缓存功能)
这个模块是实现了Nginx的七层负载均衡
- 功用:
可以将后端响应客户端请求的真实的服务器进行分组,实现后端服务器的批量上线和下线
- 使用方式:
服务器组必须定义在http端中,在location段使用反代指令调用
# 服务器组的选项说明
1:weight=
1 指定权重
2:max_fails=
3 指定如果想后端服务器请求
3次,依然不相应,则将其标记为不可用
3:fail_timeout=
10s 指定如果请求超过了
10秒,后端服务器任然无法响应,那么表示此次请求失败
4:backup 指定此服务器为备用服务器,当所有的后端服务器都不用时启用,俗称救火服务器
5:down 指定此服务器下线,不再接受用户的请求
http{
upstream static-servers {
least_conn;
keepalive
3;
server
192.168.
23.11:
80
weight=1
max_fails=3
fail_timeout=30s;
server
192.168.
23.12:
80
weight=1
max_fails=3
fail_timeout=30s;
server
192.168.
23.13:
80
weight=1 backup;
server
192.168.
23.14:
80
weight=1 down;
}
upstream dynamic-servers {
ip_hash;
hash $request_uri;
server
192.168.
23.16:
80
weight=1
max_fails=3
fail_timeout=30s;
server
192.168.
23.17:
80
weight=1
max_fails=3
fail_timeout=30s;
server
192.168.
23.18:
80
weight=1 backup;
server
192.168.
23.19:
80
weight=1 down;
}
location ~* \.html$ {
proxy_pass http://static-servers;
}
location ~* \.php$ {
proxy_pass http://dynamic-servers;
}
}
(五)ngx_http_upstream_hc_module模块详解
(只有商业版才可以使用)
参考博客: http://blog.csdn.net/nimeijian/article/details/73302274
github 开源模块:https://github.com/yaoweibin/nginx_upstream_check_module
-
功用:用于检查后端主机的健康状态
-
health_check指令详解
match=name:指定按照什么样的标准判断后端服务器的健康状态
interval=
3:指定多长时间检测一次后端服务器
fails=
3:指定如果想后端服务器请求
3次,依然不相应,则将其标记为不可用
passes=
1:指定后端服务器只要有一次响应了请求,则将其标记为可用
uri=/.health_page:指定健康状态检测所请求的URI资源路径,这里是请求站点下的.health_page页面
port=
80:向服务器的哪个端口发起健康状态的检查请求
http{
match health {
status
200;
header Content-
Type = text/html;
body ~
"health";
}
location
~* \.html$ {
proxy_pass http://static-servers;
health_check
match=health
interval=
3
fails=
3
passes=
1
uri=/.health_page
port=
80;
}
location
~* \.php$ {
proxy_pass http://dynamic-servers;
}
}
(六)memcached缓存入门
memcached基于K/V存储
将所有的数据都是存储在内存中
每一个存储项都包含 key(键)、flag(标志位)、expire time(过期时间)、size(值的字节大小)、value(值)
memcached的脚本参数配置文件
/etc/sysconfig
/memcached
yum install -y memcached
[root@
7 ~]
# rpm -ql memcached
/etc/sysconfig/memcached
/usr/bin/memcached
/usr/bin/memcached-tool
/usr/lib
/systemd/system/memcached.service
/usr/share
/doc/memcached
-1.4
.15
/usr/share
/doc/memcached
-1.4
.15/AUTHORS
/usr/share
/doc/memcached
-1.4
.15/CONTRIBUTORS
/usr/share
/doc/memcached
-1.4
.15/COPYING
/usr/share
/doc/memcached
-1.4
.15/ChangeLog
/usr/share
/doc/memcached
-1.4
.15/NEWS
/usr/share
/doc/memcached
-1.4
.15/README.md
/usr/share
/doc/memcached
-1.4
.15/protocol.txt
/usr/share
/doc/memcached
-1.4
.15/readme.txt
/usr/share
/doc/memcached
-1.4
.15/threads.txt
/usr/share
/man/man1/memcached-tool
.1.gz
/usr/share
/man/man1/memcached
.1.gz
cat /etc/sysconfig/memcached
PORT=
"11211" :默认的端口
USER=
"memcached" :默认运行memcached的用户
MAXCONN=
"1024" :默认最大并发连接数
1024
CACHESIZE=
"64" : 默认内存缓存的空间
64M
如何连接至memcached服务器,检查其缓存的信息
telnet
192.168
.23
.6
11211
1:stats
STAT pid
17357
STAT uptime
1569
STAT time
1439175334
STAT version
1.4
.15
STAT libevent
2.0
.21-stable
STAT pointer_size
64
STAT rusage_user
0.027995
STAT rusage_system
0.023996
STAT curr_connections
10
STAT total_connections
12
STAT connection_structures
11
STAT reserved_fds
20
STAT cmd_get
9
STAT cmd_set
3
STAT cmd_flush
0
STAT cmd_touch
0
STAT get_hits
0
STAT get_misses
0
STAT delete_misses
0
STAT delete_hits
0
STAT incr_misses
0
STAT incr_hits
0
STAT decr_misses
0
STAT decr_hits
0
STAT cas_misses
0
STAT cas_hits
0
STAT cas_badval
0
STAT touch_hits
0
STAT touch_misses
0
STAT auth_cmds
0
STAT auth_errors
0
STAT bytes_read
1248
STAT bytes_written
1052
STAT limit_maxbytes
67108864
STAT accepting_conns
1
STAT listen_disabled_num
0
STAT threads
4
STAT conn_yields
0
STAT hash_power_level
16
STAT hash_bytes
524288
STAT hash_is_expanding
0
STAT malloc_fails
0
STAT bytes
0
STAT curr_items
1
STAT total_items
1
STAT expired_unfetched
0
STAT evicted_unfetched
0
STAT evictions
0
STAT reclaimed
0
2:stats items
STAT items:
1:number
1
STAT items:
1:age
946
STAT items:
1:evicted
0
STAT items:
1:evicted_nonzero
0
STAT items:
1:evicted_time
0
STAT items:
1:outofmemory
0
STAT items:
1:tailrepairs
0
STAT items:
1:reclaimed
1
STAT items:
1:expired_unfetched
0
STAT items:
1:evicted_unfetched
0
3:stats slabs
STAT
1:chunk_size
96
STAT
1:chunks_per_page
10922
STAT
1:total_pages
1
STAT
1:total_chunks
10922
STAT
1:used_chunks
1
STAT
1:free_chunks
10921
STAT
1:free_chunks_end
0
STAT
1:mem_requested
71
STAT
1:get_hits
7
STAT
1:cmd_set
6
STAT
1:delete_hits
1
STAT
1:incr_hits
3
STAT
1:decr_hits
1
STAT
1:cas_hits
0
STAT
1:cas_badval
0
STAT
1:touch_hits
0
STAT active_slabs
1
STAT total_malloced
1048512
END
4:stats sizes
stats sizes
STAT
96
1
END
1:stats
2:stats items
3:stats slabs
4:stats sizes
5:set
set name
0
60
3
yhy
STORED
6:add
add class
0
600
3
ops
STORED
7:replace
8:append
append class
0
6000
9
uplooking
STORED
9:prepend
prepend class
0
6000
9
uplooking
STORED
10:get
get name
VALUE name
0
3
yhy
11:delete
delete class
DELETED
12:incr:当一个
key对应的value为数值的时候,让其加一个数
add age
0
600
2
25
STORED
incr age
60
85
get age
VALUE age
0
2
85
END
13:decr:当一个
key对应的value为数值的时候,让其减一个数
decr age
30
157
get age
VALUE age
0
3
157
END
14:flush_all:清空所有的缓存,将有效时长设置为
0,不会删除
key
-
l :设置监听的地址
-
d :以守护进程的模式运行
-
u :以哪个用户运行
-
m :指定缓存空间大小,默认是64 megabytes,
-
c :指定最大并发连接数,默认是1024
-
p :设置监听的端口
-
U :设置udp的端口,可选
-
M:缓存空间耗尽时,向客户端返回错误信息,而不是使用LRU算法进行缓存清理
-
f :设置每类slab中的chuck的倍数增长因子
-
t :设置处理用户请求的线程数
-
n:设置chuck的最小值
启动命令运行memcached,指定chuck的增长因子为1.1
memcached -u memcached -f 2 -vv
memcached内存管理机制---slabs 内存分配器
物理内存分配:
内存的大小有page决定,每一个page为
4KB大小
逻辑内存分配:
每一个slab是
1M
每一个chunks是
1KB
安装libmemcached工具包,可以在命令行分析memcached的状态信息
yum install -y libmemcached
如:查看memcached服务器的状态信息
memstat --servers=
127.0
.0
.1
memcached-tool
127.0
.0
.1:
11211
如果想详细了解,请移步gooble
(七)PHP连接memcached
1:php-pecl-memcached
.x86_64
2:python-memcached
.noarch
1:在安装了PHP的服务器上,安装php-pecl-memcached
yum install -y httpd php php-pecl-memcached
2:修改配置文件/etc/php.ini,添加
session.save_handler = memcache
session.save_path = "tcp://192.168.23.10:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
extension=/usr/lib64/php/modules/memcached.so
3:将PHP的会话保存在memcached中,PHP页面如下
ini_set(
'display_errors',
'on');
$mem =
new Memcached;
$mem->addServer(
"192.168.23.10",
11211);
$mem->set(
'key',
'www.uplooking.com');
$val = $mem->get(
'key');
echo $val;
?>
4:在memcached的服务器上安装telnet
yum install -y memcached
yum install -y telnet
5:在没有访问页面前,测试下是否memcached中有缓存项
memcached-tool 127.0.0.1:11211
6:访问页面后,测试下是否memcached中有缓存项
memcached-tool 127.0.0.1:11211
7:使用telnet登入
telnet 127.0.0.1 11211
get key
VALUE key 0 17
www.uplooking.com
END