vlambda博客
学习文章列表

环境搭建之Linux系统安装配置Nginx

环境搭建之Linux系统安装配置Nginx

技术强化

环境搭建之Linux系统安装配置Nginx
环境搭建之Linux系统安装配置Nginx

这篇文章我们一起来学习Linux服务器安装和配置Nginx,排版,码字耗费了很长的时间,觉得有价值记得一键三连支持。废话不多说,我们直接开始实操起来,以下内容中凡是涉及到Linux命令的,统一用绿色标记

环境搭建之Linux系统安装配置Nginx



一、服务器

你需要一台服务器,阿里云、腾讯云、华为云的服务器都可以,购买的这些服务器一般都会给你安装好镜像。

我是在腾讯云买的服务器,我自己学习用就搞了一台便宜点的,具体想要什么样的,根据大家自己的需要来就行。


轻量应用服务器:

地域:北京

套餐类型:通用型

实例规格:CPU(1核)  内存(2GB)

系统盘:500GB SSD云硬盘

流量包:500GB/月(带宽:5Mbps)

镜像类型:系统镜像

操作系统:CentOS 7.6 64bit




二、安装

01

环境准备


先准备安装nginx需要的环境

yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel


环境搭建之Linux系统安装配置Nginx


02

下载Nginx安装包


Nginx官网http://nginx.org/


Nginx官网提供了三个类型的版本

Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版


Stable version:最新稳定版,生产环境上建议使用的版本


Legacy versions:遗留的老版本的稳定版


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


环境搭建之Linux系统安装配置Nginx


03

解压安装包


tar  xvf nginx-1.8.1.tar.gz


环境搭建之Linux系统安装配置Nginx

cd nginx-1.20.1


环境搭建之Linux系统安装配置Nginx


04

编译Nginx:make


编译是为了检查系统环境是否符合编译安装的要求,比如是否有

gcc编译工具,是否支持编译参数当中的模块,并根据开启的参数等生成Makefile文件为下一步做准备:


./configure  --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log  --http-log-path=/var/log/nginx/access.log  --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock  --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre


环境搭建之Linux系统安装配置Nginx

环境搭建之Linux系统安装配置Nginx

运行后生成了Makefile文件

环境搭建之Linux系统安装配置Nginx


make


编译步骤,根据Makefile文件生成相应的模块


环境搭建之Linux系统安装配置Nginx

环境搭建之Linux系统安装配置Nginx


05

安装:make install


make install


创建目录,并将生成的模块和文件复制到相应的目录


环境搭建之Linux系统安装配置Nginx

环境搭建之Linux系统安装配置Nginx


备注:nginx完成安装以后,/user/local/nginx下面有四个主要的目录


环境搭建之Linux系统安装配置Nginx


conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。


html:该目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。


logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。


sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。


06

通过命令启动和关闭nginx


/user/local/nginx/sbin/nginx

报错 => nginx: [emerg] getpwnam("nginx") failed  #没有nginx用户  


useradd -s /sbin/nologin -M nginx 

id nginx 

/user/local/nginx/sbin/nginx 

报错 => nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory)  #目录不存在  


mkdir -p /var/tmp/nginx/client/  

/usr/local/nginx/sbin/nginx  #直到没有报错,才算启动完成


环境搭建之Linux系统安装配置Nginx


07

重读配置文件和关闭服务


/usr/local/nginx/sbin/nginx #启动 服务 


/usr/local/nginx/sbin/nginx   -s  reload  #不停止服务重读配置文件 


/usr/local/nginx/sbin/nginx -s stop  #停止服务   


08

验证端口是否开启



ps -ef | grep nginx 

lsof -i:80  #显示占用80的进程


环境搭建之Linux系统安装配置Nginx

环境搭建之Linux系统安装配置Nginx


09

查看主进程ID号


获取nginx主进程号的办法:


cat /var/run/nginx/nginx.pid   #查看nginx的pid文件,此文件保存的就是nginx的主进程id


环境搭建之Linux系统安装配置Nginx



三、配置

01

nginx 主配置文件


nginx.conf文件


默认配置文件在/usr/local/nginx/conf里面,nginx.conf文件,以下是编译安装后的默认配置:


grep -v "#" /usr/local/nginx/conf/nginx.conf | grep -v  "^$"


环境搭建之Linux系统安装配置Nginx


nginx.conf配置文件内容如下:



#全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,Nginx的PID路径,日志路径等。

worker_processes  1;   #默认启动一个工作进程

events {  #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。

      worker_connections  1024;   #设置nginx可以接受的最大并发,多个进程只和

  }

 http {   #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。

      include       mime.types;  #文件扩展名与文件类型映射表

      default_type  application/octet-stream; #默认文件类型

      sendfile        on; #是否调用 sendfile 函数(zero copy -->零copy方式)来输出文件,普通应用打开,可以大幅提升nginx的读文件性能,如果服务器是下载的就需要关闭,

      keepalive_timeout  65;  #长连接超时时间,单位是秒

      server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个locating模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用8090端口提供web服务、

              listen       8090;  #server的全局配置,配置监听的端口

              server_name  localhost;  #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。

                      root   html;  #相当于默认页面的目录名称,默认是相对路径,可以使用绝对路径配置。

                      index  index.html index.htm;

              }

              error_page   500 502 503 504  /50x.html;  #错误页面的文件名称

              location = /50x.html {  #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。

                      root   html;   #定义默认页面所在的目录

              }

      }

}




02

配置Nginx准备



  • 配置nginx 主进程的启动用户和工作进程数:


user  xxxx;   #每一条指令都要以分号结尾  


worker_processes  1; #可以指定启动的固定nginx进程数,或使用auto,auto是启动与当前CPU 线程相同的进程数,如CPU是四核八线程的就启动八个进程的Nginx工作进程。


  • 绑定Nginx 工作进程到不同的CPU上:


默认Nginx是不进行保定的,绑定并不能是当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx 工作进程在不同cpu上的跳转,减少了CPU对进程的资源分配与回收,因此可以有效的提升nginx服务器的性能,配置如下:



grep process /proc/cpuinfo  | wc -l #确认CPU的核心数量


环境搭建之Linux系统安装配置Nginx


四个线程CPU的配置:

        worker_processes  4;

        worker_cpu_affinity 0001 0010 0100 1000;


八个线程CPU的配置:

        worker_processes  8;

        worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;


PID和错误日志文件路径:

        #pid        logs/nginx.pid;   #可以指定绝对路径

        #error_log  logs/error.log;  #指定错误日志路径

        #error_log  logs/error.log  notice;  #指定一个日志记录级别

        #error_log  logs/error.log  info;


支持的日志级别:

语法:

        error_log file [ debug | info | notice | warn | error | crit ]  | [{  debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ]


        日志级别 = 错误日志级别 | 调试日志级别; 或者

        日志级别 = 错误日志级别;


错误日志的级别: emerg, alert, crit, error, warn, notic, info, debug,


调试日志的级别: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysql


error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少


error_log 指令的日志级别配置分为错误日志级别和调试日志级别,错误日志只能设置一个级别,而且错误日志必须书写在调试日志级别的前面,另外调试日志可以设置多个级别,其他配置方法可能无法满足需求。



03

Nginx配置文件参考



nginx.conf文件具体配置参考:


以下是我自己根据实际工作情况,配置的nginx文件,可以为大家配置自己的做参考:



user www www;

worker_processes  auto;

error_log /var/log/nginx/error.log crit;

pid /var/run/nginx/nginx.pid;

worker_rlimit_nofile 51200;


events {

    use epoll;

    worker_connections  51200;

    multi_accept on;

}


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"';

     log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

     access_log  /var/log/nginx/access.log main;

     access_log  /var/log/nginx/access.404.log log404;

     server_names_hash_bucket_size 128;

     client_header_buffer_size 32k;

     large_client_header_buffers 4 32k;

     client_max_body_size 100m; #设定通过nginx上传文件的大小    

     sendfile   on;

     tcp_nopush on;

     keepalive_timeout 60;

     tcp_nodelay on;

     fastcgi_connect_timeout 300;    #连接到后端fastcgi超时时间

     fastcgi_send_timeout 300;   #向fastcgi请求超时时间(这个指定值已经完成两次握手后向fastcgi传送请求的超时时间)

     fastcgi_read_timeout 300;   #接收fastcgi应答超时时间,同理也是2次握手后

     fastcgi_buffer_size 64k;    #读取fastcgi应答第一部分需要多大缓冲区,该值表示使用1个64kb的缓冲区读取应答第一部分(应答头),可以设置为fastcgi_buffers选项缓冲区大小

     fastcgi_buffers 4 64k;  #指定本地需要多少和多大的缓冲区来缓冲fastcgi应答请求,假设一个php或java脚本所产生页面大小为256kb,那么会为其分配4个64kb的缓冲来缓存;若页面大于256kb,那么大于的256kb的部分会缓存到fastcgi_temp指定路径中,这并非是个好办法,内存数据处理快于硬盘,一般该值应该为站点中php/java脚本所产生页面大小中间值,如果站点大部分脚本所产生的页面大小为256kb,那么可把值设置为16 16k,4 64k等

      fastcgi_busy_buffers_size 128k; #默认值是fastcgi_buffer的2倍

     fastcgi_temp_file_write_size 256k;  #写入缓存文件使用多大的数据块,默认值是fastcgi_buffer的2倍

    

      gzip on;    #gzip用于设置开启或者关闭gzip模块,“gzip on”表示开启GZIP压缩,实时压缩输出数据流

     gzip_min_length  1k;    #gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大

     gzip_buffers     4 16k;     #gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果

     gzip_http_version 1.1;  #gzip_http_version用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可

     gzip_comp_level 2;  #gzip_comp_level用来指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源

     gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; #gzip_types用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的

     gzip_vary on;   #gzip_vary选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据。

     gzip_proxied   expired no-cache no-store private auth;

     gzip_disable   "MSIE [1-6]\.";  #IE6一下版本不做压缩

     server {

        listen 80 default_server;

        server_name _;

        if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")

        {

            return 403;

         }

        index index.html index.htm index.php;

        root  /www/default;

        location /nginx_status

        {

            stub_status on;

            access_log   off;

        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$    

        {

            expires      30d;

        }

        location ~ .*\.(js|css)?$

        {

            expires      12h;

        }

        location ~ /\.

        {

            deny all;

        }

        access_log  /var/log/nginx/access.log main;

     }

     include vhost/*.conf;

}



监测配置文件是否正确:


有错误会提示,然后去修改


环境搭建之Linux系统安装配置Nginx


/usr/local/nginx/sbin/nginx -t


环境搭建之Linux系统安装配置Nginx

重启nginx,完成!!!


该文章参考链接如下:

https://blog.csdn.net/wangbin_0729/article/details/82109693

https://blog.csdn.net/tjcyjd/article/details/50695922

https://www.cnblogs.com/zhang-shijie/p/5294162.html


环境搭建之Linux系统安装配置Nginx

end


关注我

发现更多精彩