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/;
}