Nginx安装和简介

Nginx是一个开源、高性能、高可靠的HTTP服务器软件,也可以作为高性能的反向代理、软负载均衡器使用,不仅如此,对于我们开发人员来说,Nginx更是一个趁手的工具。目前Nginx广泛应用于静态资源分发、负载均衡和反向代理等场景,其轻量化和模块化设计使其非常适合在高并发场景中使用。

和同类产品相比,Nginx主要有以下优点:

  1. 社区版基于BSD协议开源
  2. 具有轻量级、模块化的设计,有众多扩展模块支持
  3. 底层基于epoll实现IO多路复用,采用多worker进程架构,能够充分利用多核CPU,此外还支持使用Linux的sendfile机制,处理静态文件不通过用户态而直接使用内核态,通过诸多优化手段使得Nginx性能表现极佳

至于Nginx的缺点,似乎和很多Linux平台下的软件一样,Nginx的配置文件的语法极为难用(这里不得不吐槽一下国内的各种博客上有关Nginx的内容,大部分都是直接扔出一坨配置,没有任何详细说明,代码乱七八糟堆在一起也不格式化,看得人一头雾水)。

官方网站:https://nginx.org/en/

从软件源安装Nginx

这里我们以Ubuntu Server 16.04操作系统为例进行介绍,我们执行以下命令从APT源安装Nginx的预编译包。

apt install nginx

注意:Nginx的模块化机制比较特殊,为了追求最佳性能,Nginx的模块是需要静态编译到软件二进制可执行程序中的,这也导致目前APT源中Nginx分为nginx-corenginx-extrasnginx-full等包,它们使用了不同的编译选项加载了不同的扩展模块,默认安装的是nginx-core包,它仅包含Nginx的核心功能,而nginx-full包则自带了更多的扩展模块,一般来说nginx-core包是够用的,但某些情况下我们就是需要某个模块,此时可能就需要安装完整的nginx-full包了。

安装完成后,我们可以通过systemctl命令对Nginx服务进行管理。

当服务正常启动后,我们用浏览器访问主机的80端口,可以看到Nginx启动成功显示的默认网页,如下图所示。

查看Nginx安装信息

Nginx安装完成后,我们可以使用以下命令查看Nginx的版本信息。

nginx -V

这里在Ubuntu Server 16.04中的输出如下。

nginx version: nginx/1.10.3 (Ubuntu)
built with OpenSSL 1.0.2g  1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads

输出内容中包含了很多信息,包括Nginx的版本、编译参数、启用的模块(通过--with-xxx参数指定)等等。该输出信息很有用,有时我们需要确认Nginx编译时是否包含了某个特定扩展,此时就可以通过这个命令查看。

Nginx安装目录说明

在Ubuntu下,Nginx默认会安装到以下目录中。

  • 可执行程序:/usr/sbin/nginx
  • 配置文件目录:/etc/nginx
  • 日志目录:/var/log/nginx
  • 默认静态网站目录:/var/www/html(尽管该目录不是Nginx创建的,但Nginx默认会从该目录下分发静态文件)

关于配置文件目录,其中通常包含以下内容。

  • nginx.conf:主配置文件
  • conf.d:为了方便管理,我们可以将配置文件分开存放,该目录存放子配置文件
  • sites-available:该目录存放的也是子配置文件,但这里专门存放对应一个站点的配置,其中通常以域名作为文件名
  • sites-enabled:里面的文件都是site-available中配置文件的软链接,被链接的配置文件会被Nginx加载

有关sites-availablesites-enabled的区别是这样的,我们查看主配置文件nginx.conf,会发现如下配置文件引用。

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

根据配置我们可以发现,把对应站点的配置文件分割成sites-availablesites-enabled完全是为了方便管理站点,所有站点配置都放在sites-available中,需要启动一个配置就创建对应软链接,取消配置就删除软链接,这样管理起来非常方便。

关于Nginx for Windows

Nginx提供了针对Windows操作系统的预编译版本,我们直接去官网下载即可。Nginx for Windows并没有使用任何兼容层,它是通过调用原生的win32API实现的,但要注意Nginx在Windows操作系统下没有使用IOCP,它的底层仍使用传统的select或poll模型,因此性能相对有限,且稳定性也远不如Linux平台。

因此,Nginx for Windows用于小型项目或测试环境是足够的,但高并发场景下不建议这样使用。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。