Nginx-实现动态网站部署

Nginx的反向代理

准备工作:

两台机器IP分别为192.168.2.100/200 
安装httpd
修改配置文件启动服务
测试
修改配置文件:
    vim  /usr/local/nginx/conf/nginx.conf
+=======================================
http {
    .....
  upstream 自定义名称 {          #定义集群
      server 192.168.2.100:80;
      server 192.168.2.200:80;
   }
  server {
    listen       80;
    server_name  www.aa.com;
  location / {
        proxy_pass http://sbweb;        #调用集群
      }
}
+=======================================

测试:

    proxy上:curl http:proxy-ip       #轮询模式

统计一下次数:

echo >a.txt;for i in `seq 1000`;do echo `curl http://192.168.4.5`>>a.txt;done;cat a.txt|grep web1|wc -l;cat a.txt|grep web2|wc -l

Nginx配置upstream服务器集群池属性

weight权重 max_fails最大的失败次数 fail_timeout超时时间
+===================================================+
upstream webserver {
            server 192.168.2.100 weight=1 max_fails=1 fail_timeout=10;
            server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
    }
+===================================================+

访问方式:

                 |-----> web1
client -----> Proxy --> - 
                 |-----> web2

集群的调度算法

   ip_hash;   #相同的客户端访问相同的Web服务器,不会再通过调度算法分配。

统计一下次数:

echo >a.txt;for i in `seq 1000`;do echo `curl http://192.168.4.5`>>a.txt;done;cat a.txt|grep web1|wc -l;cat a.txt|grep web2|wc -l

Nginx的TCP/UDP调度器

步骤:

  1. 4台基础服务器,测试用
  2. 必须Nginx版本在1.09以上版本才有这个功能
  3. Nginx编译安装时需要使用–with-stream,开启ngx_stream_core_module模块

部署支持4层TCP/UDP代理的Nginx服务器

yum –y install gcc pcre-devel openssl-devel 
tar  -xf   nginx-1.13.2.tar.gz
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-1.8.0 
./configure --with-stream --with-http_ssl_module
make upgrade    #热升级

修改配置文件

+==========================================+
    stream {            #设置集群
    upstream backend {
            server 192.168.2.100:22;
            sercer 192.168.2.200:22;
    }
    server {            #指定转发的端口
    listen 12345;
    proxy_connect_timeout 1s; 
    proxy_timeout 3s; 
    proxy_pass backend;
    }
    } 

    http {
    .....
     }
+==========================================+

Nginx常见问题处理

  • 1.不显示Nginx软件版本号
  • 2.如果客户端访问服务器提示“Too many open files”如何解决
  • 3.如何解决客户端访问头部信息过长的问题
  • 4.如何让客户端浏览器缓存数据
  • 5.如何自定义返回给客户端的404错误页面
  • 6.如何查看服务器状态信息
  • 7.开启gzip压缩功能,提高数据传输效率

调优方式

  • 1.worker_processes //与CPU核心数量一致
  • 2.worker_connections //每个worker最大并发连接数
  • 3.server_tokens //服务器版本号信息
  • 4.client_header_buffer_size //默认请求包头信息的缓存
  • 5.large_client_header_buffers //大请求包头部信息的缓存个数与容量
  • 6.error_page 404 //自定义404错误页面

1.屏蔽版本信息:

+===============================================+
[root@proxy logs]# curl -I http://192.168.4.5
HTTP/1.1 200 OK
Server: nginx/1.13.11           #有详细的版本号信息,不安全
Date: Wed, 04 Apr 2018 07:30:13 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 02 Apr 2018 02:57:01 GMT
Connection: keep-alive
ETag: "5ac19bfd-264"
Accept-Ranges: bytes
+===============================================+

1.1关闭版本显示:

http {
server_tokens off;                    //不显示nginx版本号信息
....    
}
nginx -s reload 

2.优化Nginx并发量

worker_processes  4;          #与CPU核心数量一致,超过了也没有用
events {
        worker_connections  65535;  #每个work的最大并发数量,这个是最大端口数量
}

2.1优化Linux内核参数(最大文件数量)

ulimit -Hn 100000       #软限制
ulimit -Sn 100000       #硬限制

2.2测试并发:

ab -n 20000 -c 20000 http://192.168.4.5/

4.优化Nginx数据包的缓存

414 Request         #414报错,缓存小了
+====================================================+
http {
client_header_buffer_size    1k;        #默认请求包头信息的缓存    
large_client_header_buffers  4 4k;      #大请求包头部信息的缓存个数与容量
.. ..
}
+====================================================+

5.浏览器本地缓存静态数据

实质:
client -----> server  client首次访问server端口,本地缓存一次

client <----- server 服务端告诉client端读取自己的缓存 

部署方式:
+====================================================+
server {
    ...
localation \{
    ...
}   
location ~* \.(jpg|jpeg|png|css|js|ico|xml)$ {  #当匹配到为图片文件的时候执行
    expires 30d;    #定义客户端缓存的时间
    }
}
+====================================================+

6.设置默认报错

server {
    charset utf-8;              #当要设置中文则修改
    error_page   404  /40x.html;        #错误404地址
}

发表评论