美文网首页
Nginx服务器的安装和卸载

Nginx服务器的安装和卸载

作者: 西门只会吹雪 | 来源:发表于2022-01-12 13:51 被阅读0次

    Nginx的安装(Linux版本的安装)

    1. 环境准备

    为了编译Nginx源代码,我们需要标准的GCC编译器。GCC的全称为GNUCompiler Collection,其由GNU开发,并以GPL及LGPL许可证发行,是自由的类UNIX及苹果电脑Mac OS X操作系统的标准编译器。因为GCC原本只能处理C语言,所以原名为GNU C语言编译器,后来得到快速扩展,可处理C++、Fortran、Pascal、Objective-C、Java以及Ada等其他语言。

    除此之外,我们还需要Automake工具,以完成自动创建Makefile的工作。

    由于Nginx的一些模块还需要依赖其他第三方库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)等。所以在编译Nginx源代码前还需要安装这些这些库。

    #gcc安装
    yum -y install gcc-c++
    #pcre安装
    yum  -y install  pcre pcre-devel
    #zlib安装
    yum -y install zlib zlib-devel
    #OpenSSL安装
    yum -y install openssl openssl-devel
    

    前面3个就不说了,很多软件都会依赖到的包。需要安装OpenSSL是因为后期nginx可能需要配置https,因此最好提前准备好。

    在进行上面的安装之前,最好使用下面的命令看下这些软件包是否已经安装过了。

    yum list installed | grep ***
    

    到此安装环境就准备好了。

    2. 源代码编译

    Nginx的编译安装很简单,在Linux下建议下载tar包进行安装。

    [root@localhost ~]# cd
    
    #下载tar包
    [root@localhost ~]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
    #解压tar包
    [root@localhost ~]# tar -zxvf nginx-1.12.2.tar.gz
    [root@localhost ~]# cd nginx-1.12.2
    #配置安装路径等其他配置,默认安装目录是/usr/local/nginx
    [root@localhost nginx-1.12.2]# ./configure 
    checking for OS
     + Linux 3.10.0-957.21.3.el7.x86_64 x86_64
    checking for C compiler ... found
     + using GNU C compiler
     + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    checking for gcc -pipe switch ... found
    checking for -Wl,-E switch ... found
    checking for gcc builtin atomic operations ... found
    checking for C99 variadic macros ... found
    checking for gcc variadic macros ... found
    checking for gcc builtin 64 bit byteswap ... found
    checking for unistd.h ... found
    checking for inttypes.h ... found
    checking for limits.h ... found
    checking for sys/filio.h ... not found
    checking for sys/param.h ... found
    .....
    checking for PCRE JIT support ... found
    checking for zlib library ... found
    creating objs/Makefile
    
    Configuration summary
      + using system PCRE library
      + OpenSSL library is not used
      + using system zlib library
    
      nginx path prefix: "/usr/local/nginx"
      nginx binary file: "/usr/local/nginx/sbin/nginx"
      nginx modules path: "/usr/local/nginx/modules"
      nginx configuration prefix: "/usr/local/nginx/conf"
      nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
      nginx pid file: "/usr/local/nginx/logs/nginx.pid"
      nginx error log file: "/usr/local/nginx/logs/error.log"
      nginx http access log file: "/usr/local/nginx/logs/access.log"
      nginx http client request body temporary files: "client_body_temp"
      nginx http proxy temporary files: "proxy_temp"
      nginx http fastcgi temporary files: "fastcgi_temp"
      nginx http uwsgi temporary files: "uwsgi_temp"
      nginx http scgi temporary files: "scgi_temp"
    
    [root@localhost nginx-1.12.2]# make 
    ....
    objs/src/http/modules/ngx_http_upstream_least_conn_module.o \
    objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
    objs/src/http/modules/ngx_http_upstream_zone_module.o \
    objs/ngx_modules.o \
    -ldl -lpthread -lcrypt -lpcre -lz \
    -Wl,-E
    sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
            -e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
            -e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
            -e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
            < man/nginx.8 > objs/nginx.8
    make[1]: Leaving directory `/root/nginx-1.12.2'
    
    [root@localhost nginx-1.12.2]# make install
    
            '/usr/local/nginx/conf/uwsgi_params.default'
    test -f '/usr/local/nginx/conf/scgi_params' \
            || cp conf/scgi_params '/usr/local/nginx/conf'
    cp conf/scgi_params \
            '/usr/local/nginx/conf/scgi_params.default'
    test -f '/usr/local/nginx/conf/nginx.conf' \
            || cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf'
    cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf.default'
    test -d '/usr/local/nginx/logs' \
            || mkdir -p '/usr/local/nginx/logs'
    test -d '/usr/local/nginx/logs' \
            || mkdir -p '/usr/local/nginx/logs'
    test -d '/usr/local/nginx/html' \
            || cp -R html '/usr/local/nginx'
    test -d '/usr/local/nginx/logs' \
            || mkdir -p '/usr/local/nginx/logs'
    make[1]: Leaving directory `/root/nginx-1.12.2'
    #查看版本
    [root@localhost nginx-1.12.2]# /usr/local/nginx/sbin/nginx -v
    nginx version: nginx/1.12.2
    

    至此,Nginx的安装就已经结束了。其实在上面的configure命令执行时我们是可以配置很多参数的,上面的安装中我们全部使用的是Nginx的默认配置。下面列举几个configure命令的常见配置,比较完整的配置项的中文含义请参见这篇博客

    配置项 含义
    --prefix=PATH 定义服务器文件的完整路径,该路径同时也是configure命令设置的 相对路径(除类库源文件外)以及nginx.conf文件定义的相对路径的基准路径。其默认 值是/usr/local/nginx
    --sbin-path=PATH 设置nginx可执行文件的完整路径,该路径仅在安装期间使用, 默认路径为*prefix*/sbin/nginx
    --conf-path=PATH 设置配置文件nginx.conf的完整路径。如有必要,总是可以 在nginx启动时通过命令行参数-cfile指定一个不同的配置文件路径。 默认路径为*prefix*/conf/nginx.conf
    --error-log-path=PATH 设置记录主要错误、警告以及调试信息日志的完整路径。安装完成后, 该路径总是可以在nginx.conf文件中用 error_log 指令来修改。 默认路径为*prefix*/logs/error.log
    --pid-path=PATH 设置nginx.pid文件的完整路径,该文件存储了主进程的进程ID。安装完成后, 该路径总是可以在nginx.conf文件中用 pid指令来修改。 默认路径为*prefix*/logs/nginx.pid

    Configure命令还有很多配置参数,可以通过./configure --help查看。其中:

    • with开头的表示该模块默认是未开启的,可以使用--with开启。
    • without开头的表示该模块默认是启用的,可以使用--without禁用。
    • 第三方模块使用--add-module=PATH添加。如果支持动态加载,使用--add-dynamic-module=PATH添加。

    一个配置命令的列子如下:

    ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=../pcre-4.4 --with-zlib=../zlib-1.1.3
    
    

    3.一些常用命令

    #使用-c可以自定义指定Nginx的配置问价,默认的是安装目录下的配置
    nginx -c /usr/local/nginx/conf/nginx.conf
    nginx -s stop
    nginx -s quit
    kill -9 PID
    #重新加载配置
    nginx -s reload 
    

    Nginx卸载

    1.首先输入命令 ps -ef | grep nginx检查一下nginx服务是否在运行。

    [root@localhost /]# ps -ef |grep nginx
    root       3163   2643  0 14:08 tty1     00:00:00 man nginx
    root       5427      1  0 14:50 ?        00:00:00 nginx: master process nginx
    nginx      5428   5427  0 14:50 ?        00:00:00 nginx: worker process
    root       5532   2746  0 14:52 pts/0    00:00:00 grep --color=auto nginx
    
    

    2.停止Nginx服务

    [root@localhost /]# /usr/local/nginx/sbin/nginx -s stop
    [root@localhost /]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      3403/redis-server 0 
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1044/sshd           
    tcp        0      0 0.0.0.0:8442            0.0.0.0:*               LISTEN      15788/java          
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      19829/java          
    tcp6       0      0 :::3306                 :::*                    LISTEN      13523/mysqld 
    

    3.查找、删除Nginx相关文件

    • 查看Nginx相关文件:whereis nginx
    [root@localhost /]# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz /usr/share/man/man3/nginx.3pm.gz
    
    • find查找相关文件
    [root@localhost /]# find / -name nginx
    /usr/lib64/perl5/vendor_perl/auto/nginx
    /usr/lib64/nginx
    /usr/share/nginx
    /usr/sbin/nginx
    /etc/logrotate.d/nginx
    /etc/nginx
    /var/lib/nginx
    /var/log/nginx
    
    • 依次删除find查找到的所有目录:rm -rf /usr/sbin/nginx

    4.再使用yum清理

    [root@localhost /]# yum remove nginx
    依赖关系解决
    
    ======================================================================================================
     Package                              架构            版本                       源              大小
    ======================================================================================================
    正在删除:
     nginx                                x86_64          1:1.12.2-3.el7             @epel          1.5 M
    为依赖而移除:
     nginx-all-modules                    noarch          1:1.12.2-3.el7             @epel          0.0  
     nginx-mod-http-geoip                 x86_64          1:1.12.2-3.el7             @epel           21 k
     nginx-mod-http-image-filter          x86_64          1:1.12.2-3.el7             @epel           24 k
     nginx-mod-http-perl                  x86_64          1:1.12.2-3.el7             @epel           54 k
     nginx-mod-http-xslt-filter           x86_64          1:1.12.2-3.el7             @epel           24 k
     nginx-mod-mail                       x86_64          1:1.12.2-3.el7             @epel           99 k
     nginx-mod-stream                     x86_64          1:1.12.2-3.el7             @epel          157 k
    
    事务概要
    ======================================================================================================
    移除  1 软件包 (+7 依赖软件包)
    
    安装大小:1.9 M
    是否继续?[y/N]:
    

    Nginx 配置

    创建 Nginx 运行使用的用户 www:

    [root@ localhost ~]# /usr/sbin/groupadd www 
    [root@ localhost ~]# /usr/sbin/useradd -g www www
    

    配置nginx.conf ,将/usr/local/nginx/conf/nginx.conf替换为以下内容

    user www www;
    worker_processes 2; #设置值和CPU核心数一致
    error_log /usr/local/nginx/logs/error.log error; #日志位置和日志级别
    #错误日志级别有:
    #   debug    调试,将记录详细的大量调试信息,适合开发人员开启
    #   info     信息,记录更多的通知信息,不重要的
    #   notice   通知,记录通知信息,不重要的
    #   warn     警告,记录警告信息
    #   error    错误,记录错误信息
    #   crit     严重,只记录非常严重的错误信息
    
    pid /usr/local/nginx/nginx.pid;
    #Specifies the value for maximum file descriptors that can be opened by this process.
    worker_rlimit_nofile 65535;
    
    #==事件配置==#
    events
    {
      #use epoll;
      worker_connections 65535;
    #设置每个Worker进程可处理的并发连接数量,可根据需求合理配置此值。建议
    #与"worker_rlimit_nofile"指令的值一致或更小。
    }
    
    #==核心配置==#
    http
    {
      include mime.types;
      default_type application/octet-stream;
      types_hash_max_size 2048; #设置类型哈希表的大小,单位为字节。用于将MIME类型的数据通过哈希后缓存到内存中,以提高对MIME类型映射表的读取效率。
    
      log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" $http_x_forwarded_for';
      #定义日志格式,“main”表示该日志格式名,用于下方“access_log”访问日志中调用
        #   $remote_addr        远程访问地址
        #   $remote_user        远程访问用户
        #   $time_local     访问时间
        #   $request        请求的URL与HTTP协议
        #   $status         请求状态,成功为200
        #   $body_bytes_sent    发送给客户端文件主机内容大小
        #   $http_referer       从哪个页面连接访问过来的
        #   $http_user_agent    客户端浏览器的相关信息
        #   $http_x_forwarded_for   远程访问地址,与remote_addr相同
      
      charset UTF-8; #设置字符集编码,防止NGINX对于中文返回的显示乱码。
         
      server_names_hash_bucket_size 128;
      client_header_buffer_size 32k;
      large_client_header_buffers 4 32k;
      client_max_body_size 8m;
         
      sendfile on;#启用或禁用"sendfile()"函数的调用,"on" or "off","on"表示启用,"off"表示禁用。当线程响应时,"sendfile()"函数会报告线程数据不在内存中而是在硬盘中,则线程直接去硬盘拿到响应数据直接传送给用户,而无需调用内存去硬盘拿响应数据,省去了调用内存的步骤,在小型WEB项目中可以提高请求响应效率,若是重量级WEB项目,为了平衡磁盘IO则不建议开启。我们也可以将此指令称之为高效传输模式。
      tcp_nopush on;#启用或禁用TCP_NOPUSH套接字选项,"on" or "off","on"表示启用,启用此项的前提是必须开启"sendfile","off"表示禁用。有时候在传输一个响应数据时,可能会产生多个小块数据包传出,可能这个小块数据包头部大小为30字节,而真正数据信息只有1字节,在高并发环境下会导致网络拥塞、带宽不够用问题。开启此项则传出的数据包会积累一下在传出,可以防止网络拥塞,减少带宽的占用。
      keepalive_timeout 60;#设置保持客户端连接活跃状态的超时时间,单位为秒。
      send_timeout 60s;#设置服务器将响应发送给客户端的超时时间,单位为秒。  
      tcp_nodelay on;#启用或禁用TCP_NODELAY套接字选项,"on" or "off","on"表示启用,"off"表示禁用。此项与"tcp_nopush"的功能刚好相反,若开启此项则对于小块数据包不等待立即传输,有时候一个WEB应用期望发送小块数据时,则建议开启,当“tcp_nopush”和“tcp_nodelay”同时开启时,NGINX会平衡这两个功能的使用。
      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 128k;
      gzip on; 
      gzip_min_length 1k;
      gzip_buffers 4 16k;
      gzip_http_version 1.0;
      gzip_comp_level 2;
      gzip_types text/plain application/x-javascript text/css application/xml;
      gzip_vary on;
    
      #include /etc/nginx/conf.d/*.conf;
      #设置还包含其他配置文件,我们可以将一些其他配置分离到另外一个文件中处理,避免主配置文件因为配置太
      #多导致混乱不方便管理,比如下面的"server {}",在NGINX中我们可以配置多个"server {}"则我们可以将
      #每个"server {}"分离到另外一个配置文件中,即一个配置文件对应一个WEB站点。
     
      #limit_zone crawler $binary_remote_addr 10m;
    
    #==WEB站点配置==#
     server
      {
        listen 80;#监听端口
        server_name xxx.test.com;#设置域名绑定,绑定一个域名。
        index index.html index.htm index.php;
        root /usr/local/webserver/nginx/html;#站点目录
          location ~ .*\.(php|php5)?$
        {
          #fastcgi_pass unix:/tmp/php-cgi.sock;
          fastcgi_pass 127.0.0.1:9000;
          fastcgi_index index.php;
          include fastcgi.conf;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
        {
          expires 30d;
      # access_log off;
        }
        location ~ .*\.(js|css)?$
        {
          expires 15d;
       # access_log off;
        }
        access_log off;
      }
    
    }
    
    

    nginx基础命令:

    nginx -t                         # 查看nginx状态
    
    nginx -s reload            # 重新载入配置文件
    
    nginx -s reopen           # 重启 Nginx
    
    nginx -s stop               # 停止 Nginx
    

    参考

    相关文章

      网友评论

          本文标题:Nginx服务器的安装和卸载

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