• Nginx 的安装与配置.


    一、下载

    Linux:CentOS 7.3 64位

    Nginx:nginx-1.13.1

    安装目录:/usr/local/

    wget http://nginx.org/download/nginx-1.13.1.tar.gz

    二、安装

    1、安装Nginx依赖

    (1)  gcc、gcc-c++

    yum install gcc      
    yum install gcc-c++

    (2) pcre 、zilb

    yum -y install pcre*
    yum -y install zlib*

    (3) openssl (若需要支持 https 协议)

    yum -y install openssl 
    yum -y install openssl-devel

    2、安装Nginx

    (1) 解压安装包

    tar -z -xv -f nginx-1.13.1.tar.gz

    (2) 编译

    cd nginx-1.13.1
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre

    tips:

    --prefix:设置安装路径
    --with-http_stub_status_module:支持nginx状态查询
    --with-http_ssl_module:支持https
    --with-pcre:为了支持rewrite重写功能,必须制定pcre

    (3) 安装

    make 
    make install

    (4) 启动

    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    (5) 效果

        访问 http://域名/

    三、配置

        Nginx 的配置内容都写在 /usr/local/nginx/conf/nginx.conf 中,先来看看这个文件一些配置项的含义:

    #user  nobody;
    #开启的线程数,一般跟逻辑CPU核数一致
    worker_processes  1;
    
    #定位全局错误日志文件,级别以notice显示,还有debug,info,warn,error,crit模式,debug输出最多,crir输出最少,根据实际环境而定
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #指定进程id的存储文件位置
    #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;
        #开启防止网络阻塞
        #tcp_nopush     on;
        
        #开启防止网络阻塞
        #tcp_nodelay    on;
    
        #keepalive_timeout  0;
        #设置客户端连接保存活动的超时时间
        keepalive_timeout  65;
        
        #设置允许客户端请求的最大的单个文件字节数
        client_max_body_size    200m;
        
        #指定来自客户端请求头的headebuffer大小
        #client_header_buffer_size  32k;
        
        #指定连接请求试图写入缓存文件的目录路径
        #client_body_temp_path /dev/shm/client_body_temp;
        
        #指定客户端请求中较大的消息头的缓存最大数量和大小,目前设置为4个32KB
        #large client_header_buffers 4 32k;
        
    
        #gzip  on;
        
        #配置负载均衡
        upstream tomcatServer {
            server 192.168.0.1:8680  weight=10;
            server 192.168.0.2:8680  weight=10;
        }
        
        server {
            #监听端口,其中 http 是80,https 是 443 
            listen       80;
            #主机域名
            server_name  localhost;
            #设置访问的语言编码
            #charset koi8-r;
            #设置虚拟主机访问日志的存放路径及日志的格式为main
            #access_log  logs/host.access.log  main;
    
            #监听所有的 / 访问路径,并将它转化相应服务器
            location / {
                 proxy_pass http://tomcatServer/;
            }
    
    
            #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 {
            #监听https请求
            listen       443 ssl;
            #主机域名
            server_name  api.gogo.cn;
            #公钥,他会被发送到连接服务器的每个客户端
            ssl_certificate      /usr/local/cert/lxcx.pem;
            #私钥,是用来解密的
            ssl_certificate_key  /usr/local/cert/lxcx.key;
    
            #缓存在所有工作进程之间共享,1MB可以存储4000个会话
            ssl_session_cache    shared:SSL:1m;
            #会话超时时间
            ssl_session_timeout  30m;
        
            #Nginx 只允许使用 TLS 协议
            #指令用于启动特定的加密协议    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            #选择加密套件
            ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
            #设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件
            ssl_prefer_server_ciphers  on;
    
            proxy_connect_timeout 500;
            proxy_send_timeout 500;
            proxy_read_timeout 500;
            client_max_body_size 200m;  
            location / {
               # root   html;
               # index  index.html index.htm;
               proxy_pass http://172.27.0.11:8680/;
            }
            # 配置 wss 访问
    location /socket { proxy_pass http://127.0.0.1:/9999; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
        }
      
        server {
            listen       443 ssl;
            server_name  admin.gogo.cn;
    
            ssl_certificate      /usr/local/cert/lxcx.pem;
            ssl_certificate_key  /usr/local/cert/lxcx.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
    
            location / {
                #root   html;
               # index  index.html index.htm;
            proxy_pass http://172.27.0.11:8380/;
            proxy_connect_timeout 500;
            proxy_send_timeout 500;
            proxy_read_timeout 500;
            client_max_body_size 200m;
    
            }
        }
    
    }

    1、配置负载均衡

        如上,在文件中配置以下内容,这里用的是 指定轮询几率 的权重分配方式,指定 两台服务器的访问几率。这里配置的 1:1 的访问几率,可以根据服务器的硬件条件配置相应的比例。这种配置有个缺陷就是访问请求 随机的在两台服务器间跳转,还需要解决不同服务器间session共享问题。

    upstream tomcatServer {
            server 192.168.0.1:8680  weight=10;
            server 192.168.0.2:8680  weight=10;
       }

               除了这种方式外,还有 ip_hash 方式。每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可解决session的问题:      

    upstream tomcatServer {
            ip_hash;
            server 192.168.0.1:8680;
            server 192.168.0.2:8680;
      }

               还有一种,按后端服务器的响应时间来分配请求,响应时间短的优先分配:

    upstream tomcatServer {
           server 192.168.0.1:8680;
           server 192.168.0.2:8680;
           fair;
    }

               接下来,我们就要把访问请求 映射到负载均衡上:

    location /{
              proxy_pass http://tomcatServer/;
            }

           2、重启服务

    (1)  验证配置文件是否正确

       进入nginx安装目录sbin下,输入命令./nginx -t

         

    (2) 重启服务

        进入nginx可执行目录sbin下,输入命令./nginx -s reload 即可

  • 相关阅读:
    Linux巩固记录(2) java项目的编译和执行
    Nexus私服搭建使用及发布jar包到私服上供团队其他成员使用
    多个SpringMVC项目配置统一管理(来自于springCloud的统一配置思路)
    统一接口设计及日志管理
    分布式锁实现思路及开源项目集成到springmvc并使用
    SpringBoot 入门教程:集成mybatis,redis
    【分享】标准springMVC+mybatis项目maven搭建最精简教程
    dubbox微服务实例及引发的“血案”
    密码加盐加密与存储使用
    kafka配置与使用实例
  • 原文地址:https://www.cnblogs.com/jmcui/p/9022922.html
Copyright © 2020-2023  润新知