- proxy_pass;
- http://10.0.10.3/;#带斜线的将访问10.0.10.3/index.html">proxy_pass http://10.0.10.3/;#带斜线的将访问10.0.10.3/index.html
- 反向代理隐藏后端信息
- proxy_hide_header field;
- 网络中断则中断对后端服务器的请求,开启则等待服务器返回执行
- 最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器
- 转发请求到后端服务器,address为后端的fastcgi server的地址,可⽤位置:location, if in
- fastcgi默认的主⻚资源,示例:fastcgi_index index.php;
- 设置传递给FastCGI服务器的参数值,可以是⽂本,变量或组合,可⽤于将Nginx的内置变量赋值给⾃定
- 调⽤指定的缓存空间来缓存数据,可⽤位置:http, server, location
- 定义⽤作缓存项的key的字符串,示例:fastcgi_cache_key $request_uri;
- 为哪些请求⽅法使⽤缓存
- 缓存空间中的缓存项在inactive定义的⾮活动时间内⾄少要被访问到此处所指定的次数⽅可被认作活动
- 收到后端服务器响应后,fastcgi服务器是否关闭连接,建议启⽤⻓连接
- 不同的响应码各⾃的缓存时⻓
- 需要下载较新版本的php
- 修改配置
- listen.allowed_clients=127.0.0.1
- 注释运行的客户端
- 测试页面
- 开启php-fpm及验证端口
- nginx配置转发
- http反向代理
```shell
环境:nginx 服务器 两个后端服务器
proxy_pass;
location /web { index index.html; proxy_pass http://10.0.10.3; #不带斜线的将访问web下的index.htmlproxy_pass http://10.0.10.3/;#带斜线的将访问10.0.10.3/index.html
}
反向代理隐藏后端信息
proxy_hide_header field;
location /web { index index.html; proxy_pass http://10.0.10.5:80; proxy_hide_header ETag; 隐藏ETag信息 } 其他配置 proxy_pass_request_body on|off ; #是否向后端发送http包体部分,默认未开启 proxy_pass_request_headers on|off ; #是否向后端发送请求头部,默认为开启 proxy_set_header ip $remote_addr; #透传IP,将客户端的真实地址发送至后端 proxy_connect_timeout 60s;#自定义nginx与后端服务器建立连接的超时时间 proxy_read_time 60s;#配置nginx向后端服务器发送read请求 proxy_send_time 60s;#配置nginx向后端服务器发送write请求 proxy_http_version 1.0; #配置nginx提供代理服务的http协议版本 proxy_ignore_client_about off;
网络中断则中断对后端服务器的请求,开启则等待服务器返回执行
proxy_headers_hash_bucket_size 128 ;#设置proxy_hide_header 和 proxy_set_header的时候,设置nginx保存http报文头的hash表的上限 proxy_headers_hash_bucket_size 512;#设置最大可用空间 server_name_hash_bucket_size 512; #hash表申请大小空间 server_name_hash_max_size 512;#设置hash表的上限
- ** 反向代理缓存**
```shell
location /web {
proxy_pass http://10.0.10.5:80;
proxy_set_header clientip $remote_addr;
proxy_cache proxycache;#开启缓存,定义名称,该名称会在相对于的路径下产生目录存放缓存
proxy_cache_key $request_uri; #缓存中用于键的内容
proxy_cache_valid 200 302 301 1h;# 针对特定的状态码缓存时间
proxy_cache_valid any 1m;
add_header X-Via $server_addr; #验证是否命中缓存
add_header X-Cache $upstream_cache_status; #主机名
add_header X-Accel $server_name;#数据类型
}
- 权重分配 ```shell upstream webserver { server 10.0.10.1:80 weight=1 fail_timeout=15s max_fails=3; server 10.0.10.3:80 weight=1 fail_timeout=15s max_fails=3; server 10.0.10.5:80 weight=1 fail_timeout=15s max_fails=3 backup; #备份服务器 } location /web { proxy_pass http://webserver/; proxy_set_header hd_ip $remote_addr; #添加客户端IP到报文头部 } weight 权重,默认为1 max_conns 最大活动连接数 fail_timeout 失败检测超时时间 max_fails 在多久以后对后端服务器检测失败多少次标记为不可用 proxy_next_upstream=error timeout 指定在那种检测状态下请求转发服务器 backup 备份服务器 down 标记为down状态 resolve 当server是主机名时,自动解析
hash KEY consistent; #基于指定key做hash计算,使⽤consistent参数,将使⽤ketama⼀致性hash算法,适⽤于后端是Cache服务器(如varnish)时使⽤,consistent定义使⽤⼀致性hash运算,⼀致性hash基于取模运算。 hash $request_uri consistent; #基于⽤户请求的uri做hash ip_hash; #源地址hash调度⽅法,基于的客户端的remote_addr(源地址)做hash计算,以实现会话保持, least_conn;
最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器
- ** TCP负载均衡**
- **Redis案例**
```shell
pc1
yum install redis -y
vim /etc/redis.conf
bind 0.0.0.0
pc2
stream {
upstream redis_server {
server 10.0.10.4:6379 max_fail=3 fail_timeout=30s;
}
server {
listen 10.0.10.4:6379;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass redis_server;
}
}
vim /apps/nginx/conf/nginx.conf
include /apps/nginx/conf/tcp/redis.conf;
- mysql实例
stream {
upstream mysql_server {
server 10.0.10.5:3306 max_fail=3 fail_timeout=30s;
}
server {
listen 10.0.10.5:3306;
proxy_connect_timeout 6s;
proxy_timeout 15s;
proxy_pass mysql_server;
}
}
- FastCGI
- CGI协议解决了语言解析器与web server的通讯,但是效率低下,会初始化环境,导致重复操作
- FastCGI解决了这个弊处,每次处理完请求不会关闭进程,可以处理多个请求,提高了效率
```shell
proxy_pass http://
fastcgi_pass 172.31.7.8:9000;
转发请求到后端服务器,address为后端的fastcgi server的地址,可⽤位置:location, if in
location fastcgi_index name;fastcgi默认的主⻚资源,示例:fastcgi_index index.php;
fastcgi_param parameter value [if_not_empty];设置传递给FastCGI服务器的参数值,可以是⽂本,变量或组合,可⽤于将Nginx的内置变量赋值给⾃定
义key fastcgi_param REMOTE_ADDR $remote_addr; #客户端源IP fastcgi_param REMOTE_PORT $remote_port; #客户端源端⼝ fastcgi_param SERVER_ADDR $server_addr; #请求的服务器IP地址 fastcgi_param SERVER_PORT $server_port; #请求的服务器端⼝ fastcgi_param SERVER_NAME $server_name; #请求的server name Nginx默认配置示例: location ~ .php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #默认脚本路 径 include fastcgi_params; }
缓存调用指令 fastcgi_cache zone | off;
调⽤指定的缓存空间来缓存数据,可⽤位置:http, server, location
fastcgi_cache_key string;
定义⽤作缓存项的key的字符串,示例:fastcgi_cache_key $request_uri;
fastcgi_cache_methods GET | HEAD | POST …;
为哪些请求⽅法使⽤缓存
fastcgi_cache_min_uses number;
缓存空间中的缓存项在inactive定义的⾮活动时间内⾄少要被访问到此处所指定的次数⽅可被认作活动
项 fastcgi_keep_conn on | off;
收到后端服务器响应后,fastcgi服务器是否关闭连接,建议启⽤⻓连接
fastcgi_cache_valid [code …] time;
不同的响应码各⾃的缓存时⻓
fastcgi_hide_header field; #隐藏响应头指定信息 fastcgi_pass_header field; #返回响应头指定信息,默认不会将Status、X-Accel-…返回
- **FastCGI nginx-php-fpm同一服务器**
```shell
yum install php-fpm php-mysql -y
systemctl start php-fpm
#php优化
include=/etc/php-fpm.d/*.conf
pid = /run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = yes #是否后台启动
[root@s2 ~]# cat /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 #监听地址及IP
listen.allowed_clients = 127.0.0.1 #允许客户端从哪个源IP地址访问,要允许所有⾏⾸加 ;注
释即可
user = nginx #php-fpm启动的⽤户和组,会涉及到后期⽂件的权限问题
group = nginx
pm = dynamic #动态模式进程管理
pm.max_children = 500 #静态⽅式下开启的php-fpm进程数量,在动态⽅式下他限定php-fpm的最⼤
进程数
pm.start_servers = 100 #动态模式下初始进程数,必须⼤于等于pm.min_spare_servers和⼩于
等于pm.max_children的值。
pm.min_spare_servers = 100 #最⼩空闲进程数
pm.max_spare_servers = 200 #最⼤空闲进程数
pm.max_requests = 500000 #进程累计请求回收值,会回收并重新⽣成新的⼦进程
pm.status_path = /pm_status #状态访问URL
ping.path = /ping #ping访问动地址
ping.response = ping-pong #ping返回值
slowlog = /var/log/php-fpm/www-slow.log #慢⽇志路径
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误⽇志
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files #phpsession保存⽅式及路径
php_value[session.save_path] = /var/lib/php/session #当时使⽤file保存session的⽂
件路径
#php测试页面
<?php
phpinfo();
?>
#nginx配置转发
location ~ \.php$ {
root /data/nginx/php;
fastcgi_pass 127.0.0.1:9000; #请求的地址
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#绝对路径可以省略 /data/nginx/php;
include fastcgi_params;
}
#开启php-fpm的运行状态页面
location ~ ^(pm_Status|ping){
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
}
修改配置
vim /etc/php/php-fpmd.d/www.conf listen = 10.0.0.2:90000
listen.allowed_clients=127.0.0.1
注释运行的客户端
user = nginx group = nginx
测试页面
<?php phpinfo(); ?>
开启php-fpm及验证端口
systemctl start php-fpm ps -ef | grep php-fpm 查看9000端口是否开启
nginx配置转发
location ~ .php$ { root /data/nginx/php; fastcgi_pass 10.0.10.5:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ```