美文网首页
Nginx基本配置备忘

Nginx基本配置备忘

作者: Bobby0322 | 来源:发表于2018-01-14 16:19 被阅读47次
    Nginx

    反向代理

    反向代理初印象

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

    反向代理的作用

    • ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;
    • ②通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;
    • 实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;

    Nginx

    Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

    Nginx的核心特点

    • (1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;
    • (2)配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置
    • (3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);
    • (4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。
    • (5)Master/Worker结构:一个master进程,生成一个或多个worker进程。
    • (6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
    • (7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。
    • (8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
    • (9)稳定性高:用于反向代理,宕机的概率微乎其微。

    Demo配置

    
    #user  nobody;
    worker_processes  1;#工作进程的个数,可以配置多个
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;#单个进程最大连接数(最大连接数=连接数*进程数)
    }
    
    
    http {
        include       mime.types; #文件扩展名与文件类型映射表
        default_type  application/octet-stream;#默认文件类型
    
        #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  logs/access.log  main;
    
        sendfile        on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65; #长连接超时时间,单位是秒
    
        gzip  on;#启用Gizp压缩
        
        #定义负载均衡服务器列表
        upstream  netitcast.com {  #服务器集群名字
            ip_hash; #均衡规则为 根据客户端ip地址的哈希值来分配
            #server   172.16.21.13:8081 weight=1;#服务器配置   weight是权重的意思,权重越大,分配的概率越大。
            #server   192.168.1.186:8081 weight=1;
            server   172.16.16.8:8081;
            server   172.16.16.9:9091;
            server   172.16.16.10:9091;
            #server   172.16.1.15:80 weight=1;      
        }   
    
        #当前的Nginx的配置
        server {
            listen       8888;#监听80端口,可以改成其他端口
            server_name  172.16.16.8;############## 当前服务的域名
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            #location / {
            #    root   html;
            #    index  index.html index.htm;
            #}
    
        location / {
                proxy_pass http://netitcast.com;
                proxy_redirect default;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            #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;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443;
        #    server_name  localhost;
    
        #    ssl                  on;
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_timeout  5m;
    
        #    ssl_protocols  SSLv2 SSLv3 TLSv1;
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers   on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    

    Nginx负载均衡调度的方法

    即上面配置中的upstream可选的四种负载均衡算法

    • 服务器轮询(默认方式):每个请求访问按照时间顺序逐一分配到不同的服务器端,如果后端某台服务器宕机时,故障系统会被自动的剔除,使用户访问不受影响。Weight(权重)指定轮询的权值,Weight值越大,分配到的访问几率越高,主要用于服务器端性能不均的情况下
    • ip_hash:每个请求按照访问的IP的Hash值进行分配,这行来自同一个IP的用户将会固定到后端的一个服务器,固定服务器后可以有效的解决网页存在的session共享的问题。
    • fair:该算法可以根据页面大小和加载时间长短智能的进行决策负载均衡,即根据后端服务器的响应时间来分配请求,响应时间段的优先分配。Nginx本身未集成fair模块,如果需要该调度算法,必须下载Nginx的upstream_fair模块,然后在config中配置加载。
    • url_hash:此调度算法是根据访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步的提高后端服务器的效率。Nginx本身未集成该模块,如果使用需安装Nginx的hash包,并编译加载到nginx。

    Nginx的upstream模块支持的状态参数

    在http的upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。通常设置的状态参数如下:

    • down:表示当前的server暂时不参与负载均衡。
    • backup:预留的备份服务器。当其他的所有非backup机器出现故障或者忙的时间,才会请求backup服务器,因此这台服务器的压力最轻。
    • max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
    • fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

    注:当负载均衡调度算法使用ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

    在分布式服务器集群中session共享问题

    • 同一个用户的请求锁定在同一台服务器上,这样就不会存在session在不同服务器之间共享问题。这种方案简单,但缺乏容错性(一旦服务器故障,那用户的请求将被分配给其他服务器,这时就需要重新登录),实现方式:设置集群策略为 ip_hash ;
    • session复制方式: 当任何服务器中session值发生改变,他都会将该改变广播给其他服务器,当其他服务器收到广播后也做相应的改变,从而实现session在所有服务器中一直。缺点 当集群中tomcat服务器很多时会增加网络负荷,性能低下
    • 通过创建额外的共享空间用来管理session,一般我们使用分布式缓存技术redis、memcached缓存技术;
    • 基于cookie,简单、方便,每次通过判断cookie中的用户状态信息判断用户的登录状态;但是用户信息要存在客户端,存在安全隐患,除非有相当安全的加密措施,如果加密码负载,也会 增加运算的成本;

    相关文章

      网友评论

          本文标题:Nginx基本配置备忘

          本文链接:https://www.haomeiwen.com/subject/iwgkoxtx.html