Nginx安装和简介
Nginx是一个开源、高性能、高可靠的HTTP服务器软件,也可以作为高性能的反向代理、软负载均衡器使用,不仅如此,对于我们开发人员来说,Nginx更是一个趁手的工具。目前Nginx广泛应用于静态资源分发、负载均衡和反向代理等场景,其轻量化和模块化设计使其非常适合在高并发场景中使用。
和同类产品相比,Nginx主要有以下优点:
- 社区版基于BSD协议开源
- 具有轻量级、模块化的设计,有众多扩展模块支持
- 底层基于epoll实现IO多路复用,采用多worker进程架构,能够充分利用多核CPU,此外还支持使用Linux的sendfile机制,处理静态文件不通过用户态而直接使用内核态,通过诸多优化手段使得Nginx性能表现极佳
至于Nginx的缺点,似乎和很多Linux平台下的软件一样,Nginx的配置文件的语法极为难用(这里不得不吐槽一下国内的各种博客上有关Nginx的内容,大部分都是直接扔出一坨配置,没有任何详细说明,代码乱七八糟堆在一起也不格式化,看得人一头雾水)。
从软件源安装Nginx
这里我们以Ubuntu Server 16.04操作系统为例进行介绍,我们执行以下命令从APT源安装Nginx的预编译包。
apt install nginx
注意:Nginx的模块化机制比较特殊,为了追求最佳性能,Nginx的模块是需要静态编译到软件二进制可执行程序中的,这也导致目前APT源中Nginx分为nginx-core
、nginx-extras
、nginx-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-available
和sites-enabled
的区别是这样的,我们查看主配置文件nginx.conf
,会发现如下配置文件引用。
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
根据配置我们可以发现,把对应站点的配置文件分割成sites-available
和sites-enabled
完全是为了方便管理站点,所有站点配置都放在sites-available
中,需要启动一个配置就创建对应软链接,取消配置就删除软链接,这样管理起来非常方便。
关于Nginx for Windows
Nginx提供了针对Windows操作系统的预编译版本,我们直接去官网下载即可。Nginx for Windows并没有使用任何兼容层,它是通过调用原生的win32API实现的,但要注意Nginx在Windows操作系统下没有使用IOCP,它的底层仍使用传统的select或poll模型,因此性能相对有限,且稳定性也远不如Linux平台。
因此,Nginx for Windows用于小型项目或测试环境是足够的,但高并发场景下不建议这样使用。