【服务器】Nginx

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博客

nginx常用命令大全_nginx命令大全-CSDN博客

nginx详细参数配置(史上最全) - hanease - 博客园 (cnblogs.com)

万字长文看Nginx配置详解! - 知乎 (zhihu.com)

相关推荐
白鹭26 分钟前
基于LNMP架构的分布式个人博客搭建
linux·运维·服务器·网络·分布式·apache
java叶新东老师1 小时前
linux 部署 flink 1.15.1 并提交作业
linux·运维·flink
程序员JerrySUN2 小时前
Linux系统架构核心全景详解
linux·运维·系统架构
无敌的牛2 小时前
Linux文件理解,基础IO理解
linux·运维·服务器
angushine2 小时前
鲲鹏服务器logstash采集nginx日志
运维·服务器·nginx
未来之窗软件服务2 小时前
跨平台 WebSocket 服务器的设计与实现 —— 基于.NET 8 的跨操作系统解决方案linux,macos,windows——开发工具
linux·服务器·websocket·仙盟创梦ide·东方仙盟
睿思达DBA_WGX2 小时前
由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
运维·数据库·oracle
XXYBMOOO3 小时前
Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案
linux·运维·服务器
会飞的青蛙3 小时前
从购买服务器,到Ubuntu + Docker + Jenkins 部署,再到网页展示!
nginx·ci/cd·jenkins