Nginx
Nginx是一款高性能的 HTTP 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(lgor Sysoev)所开发,官方测试 nginx 能够支支撑 5万并发链接,并且 CPU、内存等资源消耗却非常低,运行非常稳定。

反向代理是指客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址
动静分离是指为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力
应用场景
Nginx 应用场景:
- HTTP服务器:Nginx是一个 http 服务可以独立提供http服务,可以做网页静态服务器。
- 虚拟主机:可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟主机。
- 反向代理,负载均衡:当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
Nginx安装
Windows
1、下载 Nginx
官网下载,选择稳定版
2、解析安装到指定目录下
3、启动 Nginx
使用命令提示符进入nginx中,输入命令
sh
start nginx
回车确认是会出现一闪,这是正常现象
4、查看任务进程
sh
tasklist /fi "imagename eq nginx.exe"
5、访问
nginx默认首页是 http://localhost:80 ,默认端口号是80
6、Nginx使用
将内容上传到服务器的 /usr/local/nginx/html 下即可访问
Linux
1、安装 gcc 环境及第三方开发包
sh
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
gcc
sh
yum install gcc-c++
pcre
PCRE(Perl Compatible Regular Expressions)是一个 Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用 pcre 来解析正则表达式,而 pcre-devel 是使用 pcre 开发的一个二次开发库。
sh
yum install -y pcre pcre-devel
zlib
zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行gzip,所以需要在linux 上安装 zlib库。
sh
yum install -y zlib zlib-devele
openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持http 协议,还支持 https(即在ssl协议上传输 http)。
sh
yum install -y openssl openssl-devel
2、下载 Nginx 压缩包
方式一:官网下载
官网:http://nginx.org/en/download.html
方式二:命令下载
sh
wget http://nginx.org/download/nginx-1.25.1.tar.gz
3、解压
sh
tar -zxf nginx-1.25.1.tar.gz
4、配置 Nginx
进入nginx-1.8.0目录,使用 configure 命令创建 makeFile 文件
sh
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
将临时文件目录指定为
/var/temp/nginx/client
,需要创建此目录:mkdir /var/temp/nginx/client -p
执行后可以看到Makefile文件
Makefile 是一种配置文件,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
5、编译安装 Nginx
sh
make&&make install
6、启动 Nginx
进入到Nginx目录下的sbin目录
sh
cd /usr/local/nginx/sbin
输入命令启动Nginx
sh
./nginx
# 退出
./nginx -s stop
./nginx -s quit
# 重新加载配置文件
./nginx -s reload
7、访问
方式一:
curl http://localhost:80
方式二:
在浏览器访问 http://localhost:80
访问前开放端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
常用命令
sh
nginx -s start # 启动 NGINX 服务
nginx -s restart # 重启 NGINX 服务
nginx -s reload #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop #强制停止Nginx服务
nginx -s quit #优雅地停止Nginx服务(即处理完所有请求后再停止服务)
nginx -s reopen # 重新打开日志文件
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -?,-h #打开帮助信息
nginx -v #显示版本信息并退出
nginx -V #显示版本和配置选项信息,然后退出
nginx -t #检测配置文件是否有语法错误,然后退出
nginx -T #检测配置文件是否有语法错误,转储并退出
nginx -q #在检测配置文件期间屏蔽非错误信息
nginx -p prefix #设置前缀路径(默认是:/usr/share/nginx/)
nginx -c filename #设置配置文件(默认是:/etc/nginx/nginx.conf)
nginx -g directives #设置配置文件外的全局指令
# 加载 NGINX 模块。NGINX 支持多种模块,例如缓存、SSL 终止、负载均衡等,可以使用此命令加载这些模块。
nginx -m
killall nginx #杀死所有nginx进程
配置
通过nano 编辑器,可以使用其他编辑器,例如 VS Code 或 Sublime Text。
sh
sudo nano /etc/nginx/nginx.conf
配置:
sh
# 全局块
user www-data;
worker_processes 2; ## 默认1,一般建议设成CPU核数1-2倍
error_log logs/error.log; ## 错误日志路径
pid logs/nginx.pid; ## 进程id
# Events块
events {
# 使用epoll的I/O 模型处理轮询事件。
# 可以不设置,nginx会根据操作系统选择合适的模型
use epoll;
# 工作进程的最大连接数量, 默认1024个
worker_connections 2048;
# http层面的keep-alive超时时间
keepalive_timeout 60;
# 客户端请求头部的缓冲区大小
client_header_buffer_size 2k;
}
# http块
http {
include mime.types; # 导入文件扩展名与文件类型映射表
default_type application/octet-stream; # 默认文件类型
# 日志格式及access日志路径
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
# 允许sendfile方式传输文件,默认为off。
sendfile on;
tcp_nopush on; # sendfile开启时才开启。
# http server块
# 简单反向代理
server {
listen 80;
server_name domain2.com www.domain2.com;
access_log logs/domain2.access.log main;
# 转发动态请求到web应用服务器
location / {
proxy_pass http://127.0.0.1:8000;
deny 192.24.40.8; # 拒绝的ip
allow 192.24.40.6; # 允许的ip
}
# 错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 负载均衡
upstream backend_server {
server 192.168.0.1:8000 weight=5; # weight越高,权重越大
server 192.168.0.2:8000 weight=1;
server 192.168.0.3:8000;
server 192.168.0.4:8001 backup; # 热备
}
server {
listen 80;
server_name big.server.com;
access_log logs/big.server.access.log main;
charset utf-8;
client_max_body_size 10M; # 限制用户上传文件大小,默认1M
location / {
# 使用proxy_pass转发请求到通过upstream定义的一组应用服务器
proxy_pass http://backend_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
可以配置多个页面,即多个server,直接复制在下面写
可以实现不同域名同一端口访问不同的页面,只需要保证多个 server 中的端口相同,而域名不同
重启生效:
sh
sudo systemctl restart nginx
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
例子:

1、将 travel 项目部署到 Tomcat 中的 webapps 目录中
将 travel 项目打包为 ROOT 文件名
xml
<build>
<finalName>ROOT</finalName>
</build>
删除 webapps 目录下的所有文件
sh
rm -rf ./*
删除当前目录下所有文件,主要不要少.,不然会删除linux下大部分文件
webapps 下只有 ROOT 则不需要输入项目名就可以直接访问到
2、启动Tomcat
在 Tomcat 的 bin 目录下执行命令
sh
./startup.sh
3、配置 Nginx
sh
upstream tomcat-travel {
server 192.168.123.123:8080;
}
server {
listen 80; # 默认端口号
server_name yourdomain.com; # 域名或者IP
location / {
proxy_pass http://tomcat-travel;
index index.html; # 默认访问资源的名称
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html{
root html;
}
}
负载均衡
负载均衡,英文名称为Load Balance,负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
例子:
1、创建 Tomcat 集群
将 Tomcat 复制三份,并分别修改端口为8080、8081、8082

分别启动三个 Tomcat 服务

2、配置 Nginx
sh
upstream tomcat-travel {
server 192.168.123.123:8080 weight=2;
server 192.168.123.123:8081;
server 192.168.123.123:8082;
}
server {
listen 80; # 默认端口号
server_name yourdomain.com; # 域名或者IP
location / {
proxy_pass http://tomcat-travel;
index index.html; # 默认访问资源的名称
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html{
root html;
}
}
默认权重是1,按照权重比例随机访问
参考
Linux系统下安装配置nginx(保姆级教程)_nginx下载安装教程-CSDN博客
nginx(NGINX)详细下载安装及使用教程(非常适合入门)_nginx下载-CSDN博客