Nginx基础教程


Nginx简介

Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

延伸版本:tengine(淘宝)、openresrt(章亦春)等

Ngnix 特点

  • 模块化设计:良好的扩展性,可以通过模块方式进行功能扩展。
  • 高可靠性:主控进程和 worker 是同步实现的,一个 worker 出现问题,会立刻启动另一个 worker。
  • 内存消耗低:一万个长连接(keep-alive),仅消耗 2.5MB 内存。
  • 支持热部署:不用停止服务器,实现更新配置文件,更换日志文件、更新服务器程序版本。
  • 并发能力强:官方数据每秒支持 5 万并发;
  • 功能丰富:优秀的反向代理功能和灵活的负载均衡策略

Nginx 功能

  • 支持静态资源的 web 服务器。
  • http,smtp,pop3 协议的反向代理服务器、缓存、负载均衡;
  • 支持 FASTCGI(fpm)
  • 支持模块化,过滤器(让文本可以实现压缩,节约带宽),ssl 及图像大小调整。
  • 内置的健康检查功能
  • 基于名称和 ip 的虚拟主机
  • 定制访问日志
  • 支持平滑升级
  • 支持 KEEPALIVE
  • 支持 url rewrite
  • 支持路径别名
  • 支持基于 IP 和用户名的访问控制。
  • 支持传输速率限制,支持并发数限制。

Nginx 性能

Nginx 的高并发,官方测试支持 5 万并发连接。实际生产环境能到 2-3 万并发连接数。10000 个非活跃的 HTTP keep-alive 连接仅占用约 2.5MB 内存。三万并发连接下,10 个 Nginx 进程,消耗内存 150M。淘宝 tengine 团队测试结果是“24G 内存机器上,处理并发请求可达 200 万”。

Nginx 负载均衡

nginx 的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和 ip hash,在默认情况下这两种策略会编译进 nginx 内核,只需在 nginx 配置中指明参数即可。扩展策略有很多,如 fair、通用 hash、consistent hash 等,默认不编译进 nginx 内核。

安装Nginx

Windows安装

1.下载地址 https://repo.huaweicloud.com/nginx/nginx-1.21.4.zip

2.解压到本地

3.启动 下面以 C 盘根目录为例说明下:

C:\>cd nginx

C:\nginx>cd nginx-1.21.4

C:\nginx\nginx-1.21.4>start nginx

打开浏览器地址栏录入 127.0.0.1

Ubuntu安装Nginx

# 方法一:apt 直接安装
sudo apt install nginx

# 启动和设置开机启动
sudo systemctl start nginx
sudo systemctl enable nginx

在Ubuntu系统中,Nginx的默认安装路径通常如下:

  • 主配置文件:/etc/nginx/nginx.conf
  • 默认服务器的网站配置文件:/etc/nginx/sites-available/default

日志文件:

  • 访问日志:/var/log/nginx/access.log
  • 错误日志:/var/log/nginx/error.log

服务脚本:/etc/init.d/nginx

默认的HTML根目录:/var/www/html(或者通过配置文件可以设置到其他路径)

可执行文件:/usr/sbin/nginx

如果需要确认Nginx的安装路径,可以使用以下命令查找Nginx的可执行文件位置:

which nginx

要查看Nginx的配置文件位置,可以运行:

nginx -t

方法二:编译安装

## 安装依赖
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
## 下载源码
# wget http://192.168.3.200/Software/nginx-1.26.2.tar.gz
wget http://nginx.org/download/nginx-latest.tar.gz
## 解压
tar -zxvf nginx-*.tar.gz
## 进入解压后的Nginx源码目录,执行配置脚本,并指定安装目录和其他选项
./configure --prefix=/usr/local/nginx --with-http_ssl_module
## 编译并安装
make && sudo make install

CentOS7安装Nginx

1.rpm包安装

yum -y install wget vim
# 下载nginx源
$ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装nginx源
rpm -ivh nginx-*.rpm
# 正式安装nginx
yum -y install nginx
# 设置防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 启动nginx
systemctl start nginx
# 开机启动nginx
systemctl enable nginx

2.编译安装

安装编译工具及库Nginx 源码的编译依赖于 gcc 以及一些库文件,所以必须提前安装。

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

# nginx依赖pcre库
wget  http://192.168.3.200/Software/pcre-8.45.tar.bz2

tar -xvf pcre-8.45.tar.bz2

cd pcre-8.45/

./configure

make && make install

# 检验是否安装
pcre-config --version

# 下载编译nginx
cd ..
wget http://192.168.3.200/Software/nginx-1.21.4.tar.gz

tar -xvf nginx-1.21.4.tar.gz

cd nginx-1.21.4

./configure --with-http_stub_status_module --with-http_ssl_module --with-pcre=../pcre-8.45

make && make install

# 安装成功后直接执行nginx启动
/usr/local/nginx/sbin/nginx

nginx 的使用比较简单,就是几条命令。

常用到的命令如下:

nginx -s stop       快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit       平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload     因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen     重新打开日志文件。
nginx -c filename   为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t            不运行,仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -v            显示 nginx 的版本。
nginx -V            显示 nginx 的版本,编译器版本和配置参数。

创建nginx启动脚本

vim /usr/lib/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Docker安装Nginx

docker run --name myNginx \
           -p 80:80 \
           -v /data/www/html:/usr/share/nginx/html \
           -d nginx

搭建文件服务器

有时候,团队需要归档一些数据或资料,那么文件服务器必不可少。使用 Nginx 可以非常快速便捷的搭建一个简易的文件服务。

Nginx 中的配置要点:

  • 将 autoindex 开启可以显示目录,默认不开启。
  • 将 autoindex_exact_size 开启可以显示文件的大小。
  • 将 autoindex_localtime 开启可以显示文件的修改时间。
  • root 用来设置开放为文件服务的根路径。
  • charset 设置为 charset utf-8,gbk;,可以避免中文乱码问题(windows 服务器下设置后,依然乱码,本人暂时没有找到解决方法)。

一个最简化的配置如下:

autoindex on; # 显示目录
autoindex_exact_size on; # 显示文件大小
autoindex_localtime on; # 显示文件时间
server {
        charset   utf-8,gbk; # windows 服务器下设置后,依然乱码,暂时无解  
        listen       9050 default_server;
        listen       [::]:9050 default_server;
        server_name  down.blog.com;
        root         /data/;
}