首页 > 系统相关 >Nginx 入门实战(2)--简单使用

Nginx 入门实战(2)--简单使用

时间:2023-04-30 10:34:38浏览次数:83  
标签:入门 ssl -- server access Nginx log key 10.49

本文主要介绍 Nginx 的实际使用,文中所使用到的软件版本:Centos 7.9.2009、Nginx 1.22.1。

1、环境准备

这里主要演示使用 Nginx 代理 Http 及 TCP 应用,环境信息如下:

主机 用途 Http 端口 TCP 端口
10.49.196.30 部署 Http、TCP 应用 8080 9090
10.49.196.31 部署 Http、TCP 应用 8080 9090
10.49.196.33 部署 Nginx    

2、Http 应用

配置代理时都新建新的配置文件 conf/http.conf,然后在主配置文件 conf/nginx.conf 中引入该文件:

http {
    include       mime.types;
    default_type  application/octet-stream;
    ...
    include http.conf;
    ...
}

2.1、普通代理

server {
  listen 8081;
  server_name  localhost-8081;
  access_log  logs/access-8081.log;

  location /myapp {
    proxy_pass  http://10.49.196.30:8080/myapp;
  }
  location / {
    proxy_pass  https://www.baidu.com;
  }
}

代理地址为:http://10.49.196.33:8081/myapp,被代理地址为:http://10.49.196.30:8080/myapp;根地址代理百度网站。

2.2、负载均衡

upstream cluster {
  server 10.49.196.30:8080 weight=1;
  server 10.49.196.31:8080 weight=1;
  round-robin;
}

server {
  listen 8082;
  server_name  localhost-8082;
  access_log  logs/access-8082.log;

  location /myapp {
    proxy_pass  http://cluster/myapp;
  }
}

Nginx 支持三种负载均衡算法:

  • round-robin:轮询(默认算法)
  • least-connected:下一个请求将分配给当前拥有最少活跃连接数的服务器,对应的 Nginx 指令为 least_conn
  • ip-hash:同一 ip 的请求分配到同一个服务器,对应的 Nginx 指令为 ip_hash

Nginx 还支持通过指定服务器的权重(weight) 来影响负载均衡算法,上面的配置意味着两台服务器在特定负载均衡算法上具有相同的资格。

2.3、配置文件服务器

server {
  listen 8083;
  server_name  localhost-8083;
  access_log  logs/access-8083.log;
  location / {
    autoindex on;            
    autoindex_exact_size on;
    autoindex_localtime on;
    charset utf-8;
    root  /mnt/centos7;
  }
}

2.4、启用 Nginx Status

server {
  listen 8083;
  server_name  localhost-8083;
  access_log  logs/access-8083.log;
  
  location /nginxStatus {
    stub_status  on;
    access_log  on;
    auth_basic  "NginxStatus";
  }
  ...
}

2.4、限流

2.4.1、限制访问频率

limit_req_zone $binary_remote_addr zone=peripZone:10m rate=100r/m;
server {
  listen 8081;
  server_name  localhost-8081;
  access_log  logs/access-8081.log;

  location /myapp {
    limit_req zone=peripZone burst=5 nodelay;
    proxy_pass  http://10.49.196.30:8080/myapp;
  }
}

limit_req_zone 定义了一个名为 peripZone 的共享内存区域,大小为 10M,最大访问速率为:每分钟 100 个请求;该区域以“客户端地址”为 key 来保存状态信息。
limit_req 设置使用的共享内存区域,burst 定义了过量请求的缓存队列大小,超过访问速率的请求将保存该队列中;如果缓存队列也慢了将直接返回 503;nodelay 表示缓存队列中请求将不会被延迟处理(虽然超过了请求速率,缓存队列中请求也立即被处理),也可通过 delay=number 来设置缓存队列中请求被延迟处理的个数。

2.4.2、限制并发连接数

limit_conn_zone $server_name zone=perserverZone:10m;
server {
  listen 8081;
  server_name  localhost-8081;
  access_log  logs/access-8081.log;

  location /myapp {
    limit_conn perserverZone 5;
    proxy_pass  http://10.49.196.30:8080/myapp;
  }
}

limit_conn_zone 定义了一个名为 perserverZone 的共享内存区域,大小为 10M;该区域以“虚拟服务器名称”为 key 来保存状态信息。
limit_conn 设置使用的共享内存区域,并定义最大并发连接数。

2.5、配置 Https

2.5.1、生成证书

启用 Https,需要使用 OpenSSL 创建证书。

A、生成根证书

openssl genrsa -out ca.key
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pem

B、生成服务端证书

openssl genrsa -out server.key
openssl req -new -key server.key -out server.csr
openssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pem

C、生成客户端证书

openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pem
openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12

使用 OpenSSL 创建证书的详细说明可参考:OpenSSL 介绍(5)--数字证书;这里生成的证书假设都存放在 /home/mongo/ssl 目录下。

2.5.2、Nginx 中配置 Https

server {
  listen 4430 ssl;
  server_name  localhost-8084;
  access_log  logs/access-8084.log;

  ssl_certificate  /home/mongo/ssl/server.pem;
  ssl_certificate_key  /home/mongo/ssl/server.key;

  ssl_session_cache  shared:SSL:1m;
  ssl_session_timeout  5m;

  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;

  ssl_client_certificate  /home/mongo/ssl/ca.pem; 
  ssl_verify_client  on;
  
  location /myapp {
    proxy_pass  http://10.49.196.30:8080/myapp;
  }
}

上述配置开启了客户端验证,客户端访问时需要使用客户端证书(client.p12)来访问;浏览器访问导入该证书即可,Java 客户端的访问可参考:Java调用Http/Https接口(2)--HttpURLConnection/HttpsURLConnection调用Http/Https接口。如果不需要客户端验证,注释掉如下配置即可:

ssl_client_certificate  /home/mongo/ssl/ca.pem; 
ssl_verify_client  on;

3、TCP 应用

配置代理时都新建新的配置文件 conf/tcp.conf,然后在主配置文件 conf/nginx.conf 最后该文件:

...
include tcp.conf;

3.1、普通代理

stream {
  server {
    listen 9090;
    proxy_pass 10.49.196.30:9090;
  }
}

代理地址为:10.49.196.33:9090,被代理地址为:10.49.196.30:9090。

3.2、负载均衡

stream {
  upstream tcp3031 {
    server 10.49.196.30:9090;
    server 10.49.196.31:9090;
  }
  
  server { 
    listen 9091;
    proxy_pass tcp3031;
  }
} 

 

 

 

标签:入门,ssl,--,server,access,Nginx,log,key,10.49
From: https://www.cnblogs.com/wuyongyin/p/17302194.html

相关文章

  • 轻松爬取灰豚数据的抖音商品数据
    轻松爬取灰豚数据的抖音商品数据调用两次登录接口实现模拟登录我们分析登录接口,发现调用了两次不同的接口;而且,需要先调用https://login.huitun.com/weChat/userLogin,然后再调用https://dyapi.huitun.com/userLogin接口。登录成功之后,SESSION在第二个接口的Cookie中返......
  • 单机版hadoop在Linux环境下的安装和配置
    创建hadoop用户首先打开终端窗口,输入如下命令创建hadoop用户,这条命令创建可以登录的hadoop用户,并使用/bin/bash作为shell:$sudouseradd-mhadoop-s/bin/bash接着为hadoop设置登录密码,可简单设为123456,按提示输入两次:$sudopasswdhadoop为hadoop用户增加管理员权限,......
  • 使用Dino+SAM+Stable diffusion 自动进行图片的修改
    SAM是Mata发布的“SegmentAnythingModel”可以准确识别和提取图像中的对象。它可以分割任何的图片,但是如果需要分割特定的物体,则需要需要点、框的特定提示才能准确分割图像。所以本文将介绍一种称为GroundingDino的技术来自动生成SAM进行分割所需的框。除了分割以外,我......
  • 如何优化操作大数据量数据库(几十…
    聚集索引的重要性和如何选择聚集索引在上一节的标题中,笔者写的是:实现小数据量和海量数据的通用分页显示存储过程。这是因为在将本存储过程应用于“办公自动化”系统的实践中时,笔者发现这第三种存储过程在小数据量的情况下,有如下现象:1、分页速度一般维持在1秒和3秒之间。2、在......
  • nacos2.2.2(非Docker环境),配置发布失败的问题
    环境nacos:2.2.2mysql:8.0.30 解决办法网上基本都是说先看日志,然后确定问题。他们大多都是数据库或者nacos版本过低,或者使用docker,出现的问题。但我的日志中并没有任何相关的信息。然后我查了一下后端返回的错误,说是少了一个字段,好像是加密相关的东西,数据库中没有caused:P......
  • 如何优化操作大数据量数据库(改善…
    改善SQL语句很多人不知道SQL语句在SQLSERVER中是如何执行的,他们担心自己所写的SQL语句会被SQLSERVER误解。比如:select*fromtable1wherename='zhangsan'andtID>10000和执行:select*fromtable1wheretID>10000andname='zhangsan'一些人不知道以上两条语句的......
  • 表变量和临时表
    在复杂系统中,临时表和表变量很难避免,关于临时表和表变量的用法,需要注意:A、如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成。B、如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据。C、如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和......
  • 轻松绕过 Graphql 接口爬取有米有数的商品数据
    轻松绕过Graphql接口爬取有米有数的商品数据有米有数数据的API接口,使用的是一种API查询语言graphql。所有的API只有一个入口,具体的操作隐藏在请求数据体里面传输。模拟登录,获取sessionId调用登录接口,进行模拟登录。cookies={}headers={}json_data={'......
  • SQLServer 批量备份与还原
    在现在都讲究自动化管理的时代,传统的界面操作备份还原的做法不仅浪费时间和精力,而且还很容易出错,并且这次完成后,下次再有这样的要求,必须又重头开始(估计做5次就能做得人狂吐);于是,我们需要一套应对这种频繁操作、耗时、耗精力的通用处理方法,所以以下批处理脚本就诞生了。    脚本......
  • Android 用户界面---样式和主…
    样式是给View或Window指定外观和格式的属性集合。样式能够指定如高、边距、字体颜色、字体尺寸、背景颜色等属性。样式被定义在一个与布局XML文件分开的XML资源文件中。Android中的样式与Web设计中的层叠式样表类似,允许与内容分开设计。例如,通过使用样式,可以把下面这个布局XML转换......