ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Ubuntu下安装Nginx服务器并进行优化

2020-02-22 11:06:15  阅读:186  来源: 互联网

标签:index log nginx server Nginx html Ubuntu 服务器


一、Nginx介绍

  Nginx是由俄罗斯人开发的一款高性能的Web和反向代理服务器,它也可以作为电子邮件的反向代理服务器。其以稳定、并发能力强、占用资源少等显著特点备受广大互联网公司青睐。
  Nginx作为Web服务器来使用可能大家都很清楚这一点,比如我们在发布一些静态网站的时候,通常都会选择使用Nginx,而不会去选择一些专门为动态网站提供支持的服务器如Tomcat等。作为反向代理服务器来使用也是它非常擅长的一个点,如果不了解反向代理机制的话可以去搜索一下,大致的意思是:用户发送一个请求给网站,以期获得一个响应,接收用户请求的就是Nginx服务器,但Nginx不会自己来处理这个请求,它会根据用户的不同请求类型,分发给不同的服务器去实现这个功能,然后将结果返回给用户。在这一过程,看似是向一个服务器发送请求,实则背后有无数的服务器在提供支持。
  以上,便是对Nginx的大致介绍,详细介绍还得要去他的 Nginx官网才行。

二、Ubuntu下安装Nginx

  此次选用的Ubuntu版本是 Ubuntu 18.04.4 LTS。在Linux平台安装Nginx,有两种方式,其一可以通过不同Linux发行版的默认软件安装包来进行安装,其二就是自己下载Nginx源码,自行编译之后进行安装。两种方式安装的Nginx性能上并无差异,要说有差别,可能就是安装后的程序目录(例如:执行程序、配置文件的目录等)有一些差异,仅此而已。使用安装包方式安装的Nginx,其程序目录分布更符合Linux的整体系统结构的分布安排,而以自行编译方式安装的则比较自由一些。

2.1.默认安装包安装方式:

  这种方式较为简单,只需要输入几条命令,就可以完成安装。
  1)更新软件仓库源列表,使其保持最新的状态

sudo apt-get update

  2)安装Nginx(安装过程中会提示你同意占用内存,确认即可)

sudo apt-get install nginx

  至此,Nginx安装完成,然后再对其进行简单的配置就可以使用了。在进行配置之前,需要了解这种方式下安装的默认程序文件位置分布情况,具体如下:

1)所有的配置文件都在/etc/nginx下。
2)执行程序文件在/usr/sbin/nginx。
3)日志文件放在了/var/log/nginx中。分别是access.log和error.log
4)默认虚拟主机的目录配置在了/var/www/下面。这个目录位置的设定是在/etc/nginx/sites-available里的配置文件进行的。与虚拟主机相关的设置,都是在这里进行的,可以自行修改,重启Nginx即可生效。

  3)启动、关闭、重启Nginx服务

1)sudo systemctl start nginx
2)sudo systemctl restart nginx
3)sudo systemctl stop nginx

需要注意的地方
  如果正确配置了配置文件,启动后访问不到网站,记得查看防火墙规则,看是不是相关的端口未对外开放(Nginx默认的是80端口)。

2.2.源码安装方式:

  这种安装方式需要我们自己下载Nginx程序源码进行编译安装,相较于上一种方式来说比较繁琐,对Linux新手来说可能还会出错,好处就是配置比较灵活,自己可以设置程序的安装位置、配置文件的位置等等。
  既然我们要编译Nginx的源码,那么编译环境我们是必要的要准备好的,Nginx的编译过程会有一些依赖包,编译之前也得要下载安装好。另外,还需要注意版本的选择问题,一般选择最新的稳定发行版即可。
  1)编译环境(gcc)、依赖库(pcre,zlib,SSL)的安装(Ubuntu和其他的发行版Linux的命令可能有一些差别)

 sudo apt-get update
 sudo apt-get install build-essential libtool libpcre3 libpcre3-dev zlib1g-dev openssl

  2)Nginx安装(使用wget方式下载源码,解压之后进行编译、安装)

1)下载源码至目录 /usr/local/src(Nginx源码下载目录可以自己定),并进行解压:
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -zxvf nginx-1.16.1.tar.gz
2)编译源码
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx --with-http_ssl_module
( ./configure 主要作用是对即将安装的软件进行配置,检查当前的环境是否满足安装软件的依赖条件,生成makefile文件,以便你可以用make和make install来编译和安装程序。
–prefix=**,是设置安装路径.–with-http_ssl_module,使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。)
make
3)安装程序
make install

  3)配置
  安装成功之后,Nginx的程序目录如下图所示:安装成功后的目录截图
  默认情况下,conf文件夹存放的是配置文件,html文件夹是默认创建的虚拟主机的网站目录,logs是存放日志文件,sbin是nginx的执行程序所在目录。
  4)启动Nginx

#方法1(任意目录)
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#方法2(切换至程序文件所在目录)
cd /usr/local/nginx/sbin
./nginx

  5)重启、关闭Nginx
  切换至 nginx的程序文件所在目录/usr/local/nginx/sbin/,执行如下命令:

./nginx -s reload
./nginx -s stop

三、Nginx配置优化

  Nginx安装完毕之后,在使用之前,我们得要先进行一番配置后才可以使用。配置优化的目的是让Nginx尽可能以最优的方式利用系统资源,提供高效服务。 注意,修改完配置文件,需要重启Nginx才能够生效。
  两种不同安装方式的配置文件所在位置不一样,需要按照上诉内容进行寻找。方式一的配置文件是/etc/nginx/default.conf,方式二为:/usr/local/nginx/conf/nginx.conf。
  默认的配置文件如下:

  
#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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /home/html;
            index  index.html index.htm;
        }

        #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 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.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;
    #    }
    #}

}

 上面的文件的结构为:

  ...              #全局块

events {         #events块,工作模式及并发量设置
   ...
}

http      #http块,主要是设定和一次HTTP请求处理有关的配置
{
    ...   #http全局块
    server        #server块,设定虚拟主机配置
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

  上面的模块结构说明
  1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker_process数等。
  2、events块:配置影响nginx服务器与用户的网络连接处理。具体有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
  3、http块:主要是设定和一次HTTP请求处理有关的配置,可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
  5、location块:配置请求的路由,以及各种页面的处理情况。
  以上就是这几个模块的作用所在,层次感还是很清楚的,具体到我个人的网站节点配置,配置信息如下:

#user  nobody; #运行用户,可以不进行设置
worker_processes  2;  #启动进程数量,通常设置成和cpu的数量相等

#全局错误日志,这个设置可以放入全局块,http块,server块,级别依次为:debug|info|notice|warn|error|crit|alert|emerg
error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#指定nginx进程运行文件存放位置
pid        logs/nginx.pid;

#工作模式及并发量设置
events {
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,仅用于linux2.6以上内核,可以大大提高nginx的性能
    use epoll; 
    #设置网路连接序列化,防止惊群现象发生,默认为on
    accept_mutex on;  
    #设置一个进程是否同时接受多个网络连接,默认为off
    multi_accept on;  
    #单个后台worker process进程的最大并发连接数。并发总数为worker_processes 和 worker_connections 的乘积,
    #设置了反向代理的情况下,并发总数会有所变化。
    worker_connections  1024;
}

#http请求处理块。主要是设定和一次HTTP请求处理有关的配置
http {
    #文件扩展名与文件类型映射表,设定mime类型,类型由mime.type文件定义
    include       mime.types;
    #默认文件类型,默认为text/plain
    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 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
    #tcp_nopush     on;

    #连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout  65;
    #开启gzip压缩
    gzip  on;

   #设定虚拟主机配置,一个HTTP模块可以设置多个虚拟主机
    server {
        #监听的端口
        listen       80;
	#监听地址
        server_name  localhost;

        #charset koi8-r;
        
	#设定本虚拟主机的访问日志
        access_log  logs/host.access.log  main;
	#默认请求
        location / {
	    #网站根目录位置
            root   /home/html;
	    #定义首页索引文件的名称
            index  index.html index.htm;
        }
        # 定义错误提示页面
        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
        #
        #禁止访问 .htxxx 文件
	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 配置,主要是设定和一次HTTPS请求处理有关的配置主要多了个SSL,其他的和HTTP差不多
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.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;
    #    }
    #}

四、总结

  之前一直有用过Nginx作为静态资源的服务器、反向代理服务器来使用,目前来看,这个服务器的性能还是非常稳定的,占用的系统资源也不高,配置起来也方便。鉴于这么多优点,最近在搭建Hexo博客,于是就用了这个服务器。也就顺便总结一下和Nginx有关的一些东西。
  配置Nginx的过程中,参考学习了以下文章,在此表示感谢:

1, https://www.nginx.cn/76.html
2,https://www.cnblogs.com/knowledgesea/p/5175711.html

程序员在旅途 发布了62 篇原创文章 · 获赞 171 · 访问量 23万+ 私信 关注

标签:index,log,nginx,server,Nginx,html,Ubuntu,服务器
来源: https://blog.csdn.net/qq_24754061/article/details/104440067

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有