反向代理隐藏后端信息

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表的上限

  1. - ** 反向代理缓存**
  2. ```shell
  3. location /web {
  4. proxy_pass http://10.0.10.5:80;
  5. proxy_set_header clientip $remote_addr;
  6. proxy_cache proxycache;#开启缓存,定义名称,该名称会在相对于的路径下产生目录存放缓存
  7. proxy_cache_key $request_uri; #缓存中用于键的内容
  8. proxy_cache_valid 200 302 301 1h;# 针对特定的状态码缓存时间
  9. proxy_cache_valid any 1m;
  10. add_header X-Via $server_addr; #验证是否命中缓存
  11. add_header X-Cache $upstream_cache_status; #主机名
  12. add_header X-Accel $server_name;#数据类型
  13. }
  • 权重分配 ```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;

最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器

  1. - ** TCP负载均衡**
  2. - **Redis案例**
  3. ```shell
  4. pc1
  5. yum install redis -y
  6. vim /etc/redis.conf
  7. bind 0.0.0.0
  8. pc2
  9. stream {
  10. upstream redis_server {
  11. server 10.0.10.4:6379 max_fail=3 fail_timeout=30s;
  12. }
  13. server {
  14. listen 10.0.10.4:6379;
  15. proxy_connect_timeout 3s;
  16. proxy_timeout 3s;
  17. proxy_pass redis_server;
  18. }
  19. }
  20. vim /apps/nginx/conf/nginx.conf
  21. include /apps/nginx/conf/tcp/redis.conf;
  • mysql实例
    1. stream {
    2. upstream mysql_server {
    3. server 10.0.10.5:3306 max_fail=3 fail_timeout=30s;
    4. }
    5. server {
    6. listen 10.0.10.5:3306;
    7. proxy_connect_timeout 6s;
    8. proxy_timeout 15s;
    9. proxy_pass mysql_server;
    10. }
    11. }
  • 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-…返回

  1. - **FastCGI nginx-php-fpm同一服务器**
  2. ```shell
  3. yum install php-fpm php-mysql -y
  4. systemctl start php-fpm
  5. #php优化
  6. include=/etc/php-fpm.d/*.conf
  7. pid = /run/php-fpm/php-fpm.pid
  8. error_log = /var/log/php-fpm/error.log
  9. daemonize = yes #是否后台启动
  10. [root@s2 ~]# cat /etc/php-fpm.d/www.conf
  11. [www]
  12. listen = 127.0.0.1:9000 #监听地址及IP
  13. listen.allowed_clients = 127.0.0.1 #允许客户端从哪个源IP地址访问,要允许所有⾏⾸加 ;注
  14. 释即可
  15. user = nginx #php-fpm启动的⽤户和组,会涉及到后期⽂件的权限问题
  16. group = nginx
  17. pm = dynamic #动态模式进程管理
  18. pm.max_children = 500 #静态⽅式下开启的php-fpm进程数量,在动态⽅式下他限定php-fpm的最⼤
  19. 进程数
  20. pm.start_servers = 100 #动态模式下初始进程数,必须⼤于等于pm.min_spare_servers和⼩于
  21. 等于pm.max_children的值。
  22. pm.min_spare_servers = 100 #最⼩空闲进程数
  23. pm.max_spare_servers = 200 #最⼤空闲进程数
  24. pm.max_requests = 500000 #进程累计请求回收值,会回收并重新⽣成新的⼦进程
  25. pm.status_path = /pm_status #状态访问URL
  26. ping.path = /ping #ping访问动地址
  27. ping.response = ping-pong #ping返回值
  28. slowlog = /var/log/php-fpm/www-slow.log #慢⽇志路径
  29. php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误⽇志
  30. php_admin_flag[log_errors] = on
  31. php_value[session.save_handler] = files #phpsession保存⽅式及路径
  32. php_value[session.save_path] = /var/lib/php/session #当时使⽤file保存session的⽂
  33. 件路径
  34. #php测试页面
  35. <?php
  36. phpinfo();
  37. ?>
  38. #nginx配置转发
  39. location ~ \.php$ {
  40. root /data/nginx/php;
  41. fastcgi_pass 127.0.0.1:9000; #请求的地址
  42. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  43. #绝对路径可以省略 /data/nginx/php;
  44. include fastcgi_params;
  45. }
  46. #开启php-fpm的运行状态页面
  47. location ~ ^(pm_Status|ping){
  48. include fastcgi_params;
  49. fastcgi_pass 127.0.0.1:9000;
  50. fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
  51. }
  • FastCGI nginx php非同一服务器 ```shell yum install php-fpm php-mysql -y

    需要下载较新版本的php

修改配置

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; } ```