【服务器】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)

相关推荐
reddingtons1 小时前
在 Ubuntu 下通过 Docker 部署 Mastodon 服务器
服务器·ubuntu·docker
爱搞技术的猫猫6 小时前
微店商品详情API接口实战指南:从零实现商品数据自动化获取
大数据·linux·运维·数据库·自动化
若云止水7 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(1)
数据库·nginx·ubuntu
萧瑟其中~7 小时前
计算机网络:Socket网络编程 Udp与Tcp协议 第一弹
服务器·网络·计算机网络
winkel_wang7 小时前
Centos7服务器防火墙设置教程
linux·运维·服务器
一张假钞8 小时前
Hue Load Balance配置
算法·nginx·哈希算法·hue
这货不是陈进坚8 小时前
vmware虚拟机与宿主机共享文件夹
linux·运维·服务器
MarvelousJ9 小时前
Ubuntu解决Genesis报错
linux·运维·ubuntu
BTU_YC10 小时前
server can‘t find dns01.test.com: SERVFAIL
linux·运维·服务器