美文网首页
【服务与运维】1.0 centos系统上的nginx搭建

【服务与运维】1.0 centos系统上的nginx搭建

作者: bobokaka | 来源:发表于2021-01-19 12:04 被阅读0次
    1.0 涉及技术和工具
    • 后台服务架构dubbo、SpringBoot、SpringMVC、springsecurityOauth2、spring-idap、spring-data-jpa等
    • 项目管理工具maven、nexus
    • 版本管理工具:gitlab、git
    • 数据库:mysql、mongodb
    • 运维监控工具:Open-Falcon
    • 日志管理工具:ELK
    • 持续集成工具:Jenkins
    • 协作工具:confluence
    • 缓存:redis
    • 消息中间件:kafka、rocketmq
    • web服务器:tomcat、nginx
    • 容器引擎:docker
    2.0 技术流程
    • 搭建dubbo技术体系
    • 结合dubbo搭建一个完整的基础rest父类的技术框架
    • 结合dubbo的restful框架,加上基于Oauth2的token验证,实现统一用户中心设计
    • 实现springbook和dubbo相融合
    • java性能调优——JVM
    • 消息中间件redis
    • 高可用集群搭建——分布式、一致性
    • Git、ELK、Jenkins、confluence、kafka、rocketmq工具安装
    • 运维兼容工具Open-Falcon——保证服务器正常运行
    • docker部署
    3.0 服务器统一规划配置安装
    3.1 安装Centos7


    image.png
    image.png
    image.png

    U 盘的名字是 CentOS 7 x8 ,但这里指向了 CentOS\x207\x20x86_64 ,所以就会出错
    删除该条命令中路径后面的 6_64 就行了嘛

    将:

    vmlinuz initrd=initrd.imginst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
    修改为:

    vmlinuz initrd=initrd.imginst.stage2=hd:LABEL=CentOS\x207\x20x8 rd.live.check quiet
    (PS:路径中的 x20 就是空格)

    修改完后,按回车 Enter 键(ctrl+x)就可以了正常进入 CentOS 的安装界面了

    切换数据源为华为镜像站
    https://mirrors.huaweicloud.com/

    使用说明

    CentOS的镜像地址为:https://mirrors.huaweicloud.com/centos/

    1、备份配置文件:

    cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
    ##阿里云:
    cp -a /etc/yum.repos.d/AliYun.repo /etc/yum.repos.d/AliYun.repo.bak
    

    2、两种方案,请大家自行选取。

    方案一:

    下载新的CentOS-Base.repo文件到/etc/yum.repos.d/目录下,选择CentOS版本,执行如下命令:

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-8-anon.repo
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
    

    方案二:

    修改CentOS-Base.repo文件,取消baseurl开头的行的注释,并增加mirrorlist开头的行的注释。将文件中的http://mirror.centos.org替换成https://mirrors.huaweicloud.com,可以参考如下命令:

    sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/CentOS-Base.repo
    sed -i "s/mirrorlist=http/#mirrorlist=http/g" /etc/yum.repos.d/CentOS-Base.repo
    sed -i "s@http://mirror.centos.org@https://mirrors.huaweicloud.com@g" /etc/yum.repos.d/CentOS-Base.repo[](javascript:void(0); "复制")
    

    3、执行yum clean all清除原有yum缓存。

    4、执行yum makecache(刷新缓存)或者yum repolist all(查看所有配置可以使用的文件,会自动刷新缓存)。

    相关网址

    CentOS官方地址:http://www.centos.org/

    CentOS邮件列表地址:http://www.centos.org/modules/tinycontent/index.php?id=16

    CentOS论坛地址:http://www.centos.org/modules/newbb/

    CentOS文档地址:http://www.centos.org/docs/

    CentOS Wiki地址:http://wiki.centos.org/

    查看linux系统版本命令(只适合Redhat系的Linux)

    cat /etc/redhat-release
    

    当前服务器系统为:

    CentOS Linux release 7.7.1908 (Core)
    

    终止当前命令的快捷键

    Ctrl+c
    
    
    3.2 安装Java jdk

    下载Java JDK 8
    下载地址:Java SE Development Kit 8 Downloads

    image.png
    这里我下载的是:
    jdk-8u251-linux-x64.tar.gz

    所有配置软件都放到根目录下/data/program/software下。
    解压命令

    cd /data/company/company_software
    tar -zxvf jdk-8u251-linux-x64.tar.gz 
    

    也可以解压到指定的文件夹

        tar -zxvf java.tar.gz  -C /usr/java
    

    执行:


    image.png

    重命名一下Java JDK
    将目录A重命名为B

    mv A B
    

    例子:将/a目录移动到/b下,并重命名为c

    mv /a /b/c
    

    执行语句:

    mv jdk1.8.0_251 ../company_program/java8
    
    image.png

    设置环境变量

     cat /etc/profile
    
    export JAVA_HOME=/data/company/company_program/java8
    export JRE_HOME=/data/company/company_program/java8/jre
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib 
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    
    image.png

    配置生效

    source /etc/profile
    

    验证java安装

    java -version
    
    image.png

    统一host

    vi /etc/hosts
    
    202.117.17.123  centos7-69.localhost centos7-69
    

    如果即将访问的域名是http://www.aaaa.com.cn

    202.117.17.123 www.aaaa.com.cn
    

    防火墙
    对于centos6:
    查看状态:

    firewall-cmd --state
    

    关闭:

    systemctl stop firewalld.service
    

    永久关闭

    systemctl disable firewalld.service
    

    安装tomcat

    解压zip文件

     tar -zxvf apache-tomcat-8.5.54.tar.gz 
    

    zip文件,想解压缩:

    # unzip yasuo.zip
    

    删除文件夹实例:

    rm -rf /var/log/httpd/access
    

    将会删除/var/log/httpd/access目录以及其下所有文件、文件夹

    删除文件使用实例:

    rm -f /var/log/httpd/access.log
    

    将会强制删除/var/log/httpd/access.log这个文件

    解压tomcat之后,
    同一服务器部署多个tomcat时,存在端口号冲突的问题,所以需要修改tomcat配置文件server.xml。

    部署多个tomcat主要修改三个端口:

    1.HTTP端口,默认8080,如下改为8081

    <Connector port="8081" protocol="HTTP/1.1"   
    
                   connectionTimeout="60000"   
    
                   redirectPort="8443" disableUploadTimeout="false"  executor="tomcatThreadPool"  URIEncoding="UTF-8"/>  
    

    2.远程停服务端口,默认8005,如下改为8006

    <Server port="8006" shutdown="SHUTDOWN">......  
    

    3.AJP端口,默认8009,如下改,8010

    
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    

    下载nginx
    nginx是多进程单线程后台服务器工具,可以作为反向代理服务器或者邮件服务器。
    https://www.cnblogs.com/lich1x/p/11225528.html

    wget http://nginx.org/download/nginx-1.16.1.tar.gz
    wget http://nginx.org/download/nginx-1.17.10.tar.gz
    wget http://nginx.org/download/nginx-1.19.10.tar.gz
    
    tar -zxvf nginx-1.19.10.tar.gz 
    

    复制

    cp -a apache-tomcat-8.5.54 apache-tomcat-8.5.54_student
    

    nginx安装需要依赖第三方库。
    比如
    pcre(支持rewrite)
    zlib(支持gzip)
    openssl(支持ssl模块)

    安装gcc gcc-c++

    yum install -y gcc gcc-c++
    

    安装PCRE

    yum -y install pcre-devel
    

    安装zlib:

    yum -y install zlib-devel
    

    安装openssl:

    yum -y install openssl-devel
    

    编译并安装nginx

    cd /data/company/company_software/nginx-1.19.10
    

    初始化配置

    ./configure
    

    重装nginx三件套

     ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
    
    make && make install
    
    [root@service nginx-1.16.1]# /usr/local/nginx/sbin/nginx -V
    nginx version: nginx/1.16.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
    built with OpenSSL 1.0.2k-fips  26 Jan 2017
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
    [root@service nginx-1.16.1]# 
    
    
    image.png

    编译

    make install
    
    image.png

    查看nginx是否支持ssl

    /usr/local/nginx/sbin/nginx -V
    

    conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器最核心最主要的配置文件,我们主要修改配置此文件。其他配置文件是配置nginx相关功能的。
    比如:
    fastcgi功能使用的是fastcgi.conf和fastcgi——params两文件。配置文件一般都有样板配置文件,是文件名称.default结尾,使用时将其扶植并将default去掉即可。
    html目录中保存nginx服务器的web文件,但可以更改为其他目录保存web文件,另外还有一个50x.html是默认的错误页面提示页面
    logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放到其他路径,比如/var/logs/nginx里面。
    sbin:保存nginx二进制启动脚本,可以接受不同的参数已实现不同的功能。

    1 启动nginx服务

    /usr/local/nginx/sbin/nginx
    
    image.png

    查看进程

    ps -ef|grep nginx
    
    image.png
    可以通过修改nginx.conf中的worker_processes 1;参数启动多个工作进程。
    2 重启nginx服务
    service httpd restart
    /usr/local/nginx/sbin/nginx -s reload
    

    3 停止nginx服务

    /usr/local/nginx/sbin/nginx -s stop
    

    4 强制关闭nginx服务

    pkill nginx
    

    配置反向代理

    
    

    参数设置及优化
    1.网络连接优化
    优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置。on为防止被同时唤醒,默认为off。因此,nginx刚安装完以后要进行适当的优化。

    events{
    accept_mutex on;
    }
    

    2.设置是否同时接受多个网络连接

    events{
    accept_mutex on;
    multi_accept on; #打开同时接受多个新网络连接请求的功能。
    }
    

    3.隐藏nginx版本号
    防止版本号泄露被黑客攻击

    server_tokens off;#在http模块当中配置
    

    4.选择事件驱动模型

    events{
    accept_mutex on;
    multi_accept on;
    use epoll; #使用epoll事件驱动,因为epoll的性能相比其他事件驱动要好很多。
    }
    

    5.配置单个工作进程的最大连接数。

    events{
        worker_connections  1024; #最大连接数为 1024.
    }
    

    但是不能超过操作系统支持的最大文件句柄数。

    ulimit -n
    

    可修改

    ulimit -n 2048
    

    6.定义MIME-Type
    在浏览器当中可以显示的内容有HTML/GIF/HTML和flash的内容浏览器,为了取得这些资源,需要使用MIME type,即MIME是网络资源的媒体类型。作为Web服务器,必须要能够识别全都请求的资源类型。需要在文件中引入第三方文件使用include导入。

    include mime.types;
    default_type application/octet-stream;
    

    7.自定义访问日志

        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;
    
    

    访问日志是记录客户端,即用户的具体请求内容。全局配置模块中的error_log。是记录nginx服务器运行时日志保存路径和记录日记的日志的level。定义一个日志需要使用access_log指定日志的保存路径。使用log_format指定日志的格式,格式定义要保存的具体日志内容。

    8.配置允许sendfile方式传输文件
    由后端程序负责把源文件打包加密生成目标文件,然后程序读取目标文件返回给浏览器,这种做法有个致命的缺陷,就是占用大量后端程序资源,如果遇到一些访客下载速度巨慢,就会造成大量资源被长期占用得不到释放。很快,后端程序就会因为没有资源可用而无法正常提供服务,通常表现就是niginx报502错误,而sendfile打开后配合location可以实现有nginx检测文件使用存在,如果存在就有nginx直接提供静态文件游览服务,因此可以提升服务器性能。

    可以配置在http、server或者location模块:

    sendfile on;
    sendfile_max_chunk 512k; #nginx工作进程每次调用sendfile()传输的数据最大不能超过这个值,默认为零表示无限制。可以设置在http、server或者location模块中。
    

    9.配置nginx工作进程最大打开文件数
    可以设置为和linux系统最大打开文件数量一致,在局模块配置

    worker_rlimit_nofile 4096;
    
    1. 会话保持时间
        keepalive_timeout  120;
    

    11.配置网络监听
    使用listen,可以配置监听IP+端口,端口或监听unix socker

    listen 8090; #监听本机的ipv4和ipv6的8090端口等同于listen *:8000
    listen 192.168.0.1:8090 #监听指定地址的8090端口。
    listen Unix:/www/file; #监听unix socket
    

    以上1-11都可以跳过,在/usr/local/nginx/conf文件目录下,修改如下3个文件:

    #nginx配置
    user  root;
    worker_processes  8;#服务器并发处理服务关键配置
    worker_rlimit_nofile 51200;#单个线程最大文件句柄数量
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #定义全局错误日志文件。
    error_log  /data/company/company_workspace/nginx_log/logs/nginx/overrall_log/nginx_error.log  crit;
    #进程id存储文件,用来指定进程pid的存储文件位置
    pid        /data/company/company_workspace/nginx_log/logs/nginx/overrall_log/nginx.pid;
    
    events {
      worker_connections  51200; #最大连接数为 51200.
      accept_mutex on;#优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置
      multi_accept on; #打开同时接受多个新网络连接请求的功能。
      use epoll; #使用epoll事件驱动,因为epoll的性能相比其他事件驱动要好很多。
    }
    
    
    http {
      #多媒体加载依赖,使浏览器能启用mime类型
      include mime.types;
      #反向代理配置
      include open-falcon.conf;
      #正向代理配置
      include forward-proxy.conf;
      default_type  application/octet-stream;#default_type:默认类型为二进制流
    
      proxy_temp_path /usr/local/nginx/proxy_temp_dir;
      proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:20m inactive=1d max_size=5g;
    
      # 指定来自客户端请求头的headerbuffer大小。
      # 对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K;
      client_header_buffer_size 32k;
    
      #设置客户端请求头读取超时时间。
      #如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误;
      client_header_timeout 60;
    
      #用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“32K”为大小,最大缓存量为4个128K;
      large_client_header_buffers 4 32k;
    
      client_max_body_size 50m;#允许客户端请求的最大的单个文件字节数
    
      # client_body_timeout设置客户端请求主体读取超时时间。
      # 如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,
      # 默认值是60;
      client_body_timeout 60;
    
      #send_timeout指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,
      #如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
      #send_timeout 60;
    
      server_names_hash_bucket_size 512;#服务器名称哈希表的最大大小。开启多个server时使用
      #sendfile_max_chunk 512k;
      #tcp_nopush     on;
    
      server_tokens off;#在http模块当中配置,隐藏nginx版本号
    
      #客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接
      #keepalive_timeout  0;
      keepalive_timeout  120;
    
      # 开启高效文件传输模式。
      # 将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
      sendfile   on;
      tcp_nopush on;
      tcp_nodelay on;
    
      #gzip  on;#http头压缩
    
      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';
    
      fastcgi_connect_timeout 300;
      fastcgi_send_timeout 300;
      fastcgi_read_timeout 300;
      fastcgi_buffer_size 64k;
      fastcgi_buffers 4 64k;
      fastcgi_busy_buffers_size 128k;
      fastcgi_temp_file_write_size 256k;
      fastcgi_intercept_errors on;
    
      gzip on;
      gzip_min_length  1k;
      gzip_buffers     4 16k;
      gzip_http_version 1.1;
      gzip_comp_level 2;
      gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
      gzip_vary on;
      gzip_proxied   expired no-cache no-store private auth;
      gzip_disable   "MSIE [1-6]\.";
    
      limit_conn_zone $binary_remote_addr zone=perip:10m;
      limit_conn_zone $server_name zone=perserver:10m;
    
      access_log off;
    
    #  server {
    #     listen       443 ssl;
    #     server_name  isso.xjtu.edu.cn;
    #       ssl_certificate      /etc/pki/tls/certs/cn_chain.crt;
    #       ssl_certificate_key  /etc/pki/tls/private/cn_key.key;
    #     ssl_session_cache    shared:SSL:1m;
    #      ssl_session_timeout  5m;
    #
    #   ssl_ciphers  HIGH:!aNULL:!MD5;
    #   ssl_prefer_server_ciphers  on;
    #
    #    location / {
    #     proxy_pass          http://localhost:8088;#https://localhost:8088
    #     root   html;
    #      index  index.html index.htm;
    #     }
    # }
    
    
    }
    
    

    open-falcon.conf

    #反向代理配置
    server{
    
            listen       80;
            #listen      8080;
            #listen      somename:8080;
            server_name  www.baidu.com;
            index index.php index.html index.htm default.php default.htm default.html;
            client_max_body_size 60M;
            client_body_buffer_size 512K;
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
        #SSL-END
    
        #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
        #error_page 404 /404.html;
        #error_page 502 /502.html;
        #ERROR-PAGE-END
    
        #PHP-INFO-START  PHP引用配置,可以注释或修改
        #include enable-php-56.conf;
        #PHP-INFO-END
    
        #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
        #include /www/server/panel/vhost/rewrite/ttwis.com.conf;
        #REWRITE-END
    
            access_log  /data/company/company_workspace/nginx_log/logs/nginx/rproxy_log80/rproxy.access.log;  #accesslog输出路径
            error_log /data/company/company_workspace/nginx_log/logs/nginx/rproxy_log80/rproxy.error.log;     #errorlog输出路径
    
            location / {
                proxy_pass          http://127.0.0.1:8088;#http://localhost:8088
                proxy_redirect      off;
                proxy_set_header    Host $host;
                #proxy_set_header Host $http_host;           # 解决如果URL中带"."后Nginx 503错误
                #proxy_set_header    X-Real-IP $remote_addr;
                #proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    
                client_body_buffer_size 512k;
                proxy_connect_timeout 60;
                proxy_read_timeout 60;
                proxy_send_timeout 60;
                proxy_buffer_size 32k;
    
                proxy_buffers 4 64k;
                proxy_busy_buffers_size 128k;
                proxy_temp_file_write_size 128k;
                proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
                proxy_cache cache_one;
                proxy_set_header X-Forwarded-Proto https;
            }
    
    }
    
    

    forward-proxy.conf

      #正向代理配置
      server {
        listen       8080;# 代理监听端口
        server_name  localhost;
        #resolver 223.5.5.5; #代理DNS配置
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        access_log  /data/company/company_workspace/nginx_log/logs/nginx/fproxy_log/fproxy.access.log;  #accesslog输出路径
        error_log /data/company/company_workspace/nginx_log/logs/nginx/fproxy_log/fproxy.error.log;     #errorlog输出路径
    
        location / {
                proxy_pass $scheme://$host$request_uri;     # 配置正向代理参数
                proxy_set_header Host $http_host;           # 解决如果URL中带"."后Nginx 503错误
    
                proxy_buffers 256 4k;   # 配置缓存大小
                proxy_max_temp_file_size 0;     # 关闭磁盘缓存读写减少I/O
                proxy_connect_timeout 30;       # 代理连接超时时间
    
                # 配置代理服务器HTTP状态缓存时间
                proxy_cache_valid 200 302 10m;
                proxy_cache_valid 301 1h;
                proxy_cache_valid any 1m;
        }
    
    }
    
    linux其他操作

    1、强制杀死该端口进程

          sudo fuser -k -n tcp 80
    

    2、根据PID关闭某个被占用的端口

          netstat -tunlp | grep 80
    
          lsof -i:80
    
          sudo kill -9 PID
    

    优化linux内核参数

    vim /etc/sysctl.conf
    set paste
    
    # Add
     #禁用包过滤功能
    net.ipv4.ip_forward = 0
    #启用源路由核查功能
    net.ipv4.conf.default.rp_filter = 1
    #禁用所有IP源路由
    net.ipv4.conf.default.accept_source_route = 0
    #使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
    kernel.sysrq = 0
    #控制core文件的文件名是否添加pid作为扩展
    kernel.core_uses_pid = 1
    #开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
    net.ipv4.tcp_syncookies = 1
    
     net.ipv4.tcp_max_syn_backlog = 65536
     net.core.netdev_max_backlog =  32768
     net.core.somaxconn = 32768
    #每个消息队列的大小(单位:字节)限制
    kernel.msgmnb = 65536
    #整个系统最大消息队列数量限制
    kernel.msgmax = 65536
    #单个共享内存段的大小(单位:字节)限制,计算公式16G*1024*1024*1024-1(字节)
    kernel.shmmax =  17179869183
    #所有内存大小(单位:页,1页 = 4Kb),计算公式(16G*1024*1024-1)/4KB (页)
    kernel.shmall = 4194303
    #系统范围内共享内存段的最大数量。该参数的默认值是 4096.此值也是在系统中可以启动的Oracle实例的最大数量,通常不需要更改,因为显然在生产环境下,一个服务器上同时启动的实例个数达不到这个数量.
    kernel.shmmni = 4096
    #250       SEMMSL    max semaphores per array     信号集容纳最大信号数量   
    #32000     SEMMNS    max semaphores system wide   所有信号的最大数量
    #32        SEMOPM    max ops per semop call       调用单个信号集中最大信号数量
    #128       SEMMNI    max number of arrays         信号集的最大值
    kernel.sem = 250 32000 100 128
    #timewait的数量,默认是180000
    net.ipv4.tcp_max_tw_buckets = 6000
    #开启有选择的应答
    net.ipv4.tcp_sack = 1
    #支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
    net.ipv4.tcp_window_scaling = 1
    #TCP读buffer
    net.ipv4.tcp_rmem = 4096 131072 1048576
    #TCP写buffer
    net.ipv4.tcp_wmem = 4096 131072 1048576
    #为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
    net.core.wmem_default = 8388608
    #为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
    net.core.wmem_max = 16777216
    #为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
    net.core.rmem_default = 8388608
    #为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
    net.core.rmem_max = 16777216
    #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
    net.core.netdev_max_backlog = 262144
    #web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
    net.core.somaxconn = 65500
    #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
    net.ipv4.tcp_max_orphans = 3276800
    #记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
    net.ipv4.tcp_max_syn_backlog = 262144
    #时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
    net.ipv4.tcp_timestamps = 0
    #为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
    net.ipv4.tcp_synack_retries = 2
    #在内核放弃建立连接之前发送SYN包的数量
    net.ipv4.tcp_syn_retries = 2
    # net.ipv4.tcp_tw_len = 1
    #开启TCP连接中time_wait sockets的快速回收
    net.ipv4.tcp_tw_recycle = 1
    #开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
    net.ipv4.tcp_tw_reuse = 1
    #1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
    net.ipv4.tcp_mem = 94500000 915000000 927000000
    #如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
    net.ipv4.tcp_fin_timeout = 30
    #表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
    net.ipv4.tcp_keepalive_time = 120
    #对外连接端口范围
    net.ipv4.ip_local_port_range = 9000 65000
    #表示文件句柄的最大数量
    fs.file-max = 6815744
    fs.aio-max-nr = 1048576
    

    使配置立即生效:

    /sbin/sysctl -p
    

    配置开机启动nginx

    vim /etc/rc.local
    #文件最后加入如下代码
    /usr/local/webserver/nginx/sbin/nginx
    

    开机启动第二种配置方法:
    创建用于启动nginx的配置文件

    [root@localhost ~]# touch /usr/lib/systemd/system/nginx.service
    [root@localhost ~]# cd /usr/lib/systemd/system
    

    vim nginx.service

    [Unit]
    Description=nginx Server
    After=network.target
    
    [Install]
    WantedBy=multi-user.target
    
    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    PrivateTmp=true 
    
    修改nginx.service所属用户组,保持和配置文件一致

    chmod 775 nginx.service

    启动服务
    systemctl start nginx.service 
    
    关闭服务
    systemctl stop nginx.service  
    
    开机启动
    systemctl enable nginx.service
    
    重新启动服务
    systemctl restart nginx.service
    
    查看所有已启动的服务
    systemctl list-units --type=service
    
    查看服务当前状态
    systemctl status nginx.service
    
    停止开机自启动
    systemctl disable nginx.service
    
    重启
    reboot
    

    查看nginx是否自启动

    ps -ef|grep nginx
    
    编写每天定时切割Nginx日志的脚本
    vim /usr/local/nginx/sbin/cut_nginx_log.sh
    

    输入以下内容:

    #!/bin/bash
    # This script run at 00:00
    
    # The Nginx logs path
    logs_pathall="/data/company/company_workspace/nginx_log/logs/nginx/overrall_log/"
    
    mkdir -p ${logs_pathall}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_pathall}access.log ${logs_pathall}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
    kill -USR1 `cat /usr/local/nginx/nginx.pid`
    
    logs_pathfp="/data/company/company_workspace/logs/nginx/fproxy_log/"
    
    mkdir -p ${logs_pathfp}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_pathfp}access.log ${logs_pathfp}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
    kill -USR1 `cat /usr/local/nginx/nginx.pid`
    
    logs_pathrp="/data/company/company_workspace/logs/nginx/rproxy_log/"
    
    mkdir -p ${logs_pathrp}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_pathrp}access.log ${logs_pathrp}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
    kill -USR1 `cat /usr/local/nginx/nginx.pid`
    

    2、设置crontab,每天凌晨00:00切割nginx访问日志

    crontab -e
    

    输入以下内容:

    00 00 * * * /bin/bash  /usr/local/nginx/sbin/cut_nginx_log.sh
    
    image.png

    允许反向代理命令

    setsebool -P httpd_can_network_connect 1
    

    http://zyan.cc/nginx_php_v5/

    apache
    启动
    systemctl start httpd
    停止
    systemctl stop httpd
    重启
    systemctl restart httpd
    
    
    mysql
    启动
    systemctl start mysqld
    停止
    systemctl stop mysqld
    重启
    systemctl restart mysqld
    
    
    php-fpm
    启动
    systemctl start php-fpm
    停止
    systemctl stop php-fpm
    重启
    systemctl restart php-fpm
    
    
    nginx
    启动
    systemctl start nginx
    停止
    systemctl stop nginx
    重启
    systemctl restart nginx
    

    设置nginx全局变量

    vim /etc/profile 
    
    export JAVA_HOME=/data/company/company_program/java8
    export JRE_HOME=/data/company/company_program/java8/jre
    export NGINX_HOME=/usr/local/nginx/sbin
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib:$NGINX_HOME
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$NGINX_HOME
    
    source /etc/profile 
    

    设置主机名称

    hostnamectl set-hostname www.aaa.com
    

    查看主机名称

     hostnamectl status
    

    linux 创建当前路径的快捷方式放在主目录

    ln -s `pwd` ~/link_example
    

    相关文章

      网友评论

          本文标题:【服务与运维】1.0 centos系统上的nginx搭建

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