一、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)更新软件仓库源列表,使其保持最新的状态
2)安装Nginx(安装过程中会提示你同意占用内存,确认即可)
1
| 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的命令可能有一些差别)
1 2
| 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协议模块。默认情况下,该模块没有被构建。如果使用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。
默认的配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| #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; # } #}
}
|
上面的文件的结构为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| ... #全局块
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块:配置请求的路由,以及各种页面的处理情况。
以上就是这几个模块的作用所在,层次感还是很清楚的,具体到我个人的网站节点配置,配置信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
| #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
3,http://tengine.taobao.org/book/index.html