Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Nginx

作者头像
不期而遇丨
发布于 2022-09-09 10:01:23
发布于 2022-09-09 10:01:23
49400
代码可运行
举报
运行总次数:0
代码可运行

为什么使用Nginx?

刚开始做这个网站的时候,只有一个定时任务jar包,每天定时给指定用户发短信,后来觉得其他人可能也需要这种服务,在其基础上二次开发,可扩展多任务,多用户定时任务,赚了一点点,这时候已经是部署在tomcat上了,端口占用80; 后来想自己做博客,但是博客想要使用主域名,即原服务需要修改端口,但是这种形式容易忘记端口,还需要去防火墙重新放开一个端口,想的是一个二级域名可以直接访问,这时候想到Nginx!

什么是Nginx?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

Nginx的作用

  1. Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
  2. Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略。
  3. 动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

Nginx配置文件

第一部分:全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配 置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
events {
    worker_connections  1024;
}

events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。 上述例子就表示每个 work process 支持的最大连接数为 1024. 这部分的配置对 Nginx 的性能影响较大,在实际中需要灵活配置。

第三部分:http块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

        upstream boke {
	server 127.0.0.1:8090;
        }
        upstream music {
	server 127.0.0.1:8081;
        }

	server{
          listen 80;
          server_name bqeysq.com; # 此处填写你分配的二级域名,博客短域名
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://boke;  # 你本机的提供http服务的地址
          }
        }

	server{
          listen 80;
          server_name www.bqeysq.com; # 此处填写你分配的二级域名,博客长域名
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://boke;  # 你本机的提供http服务的地址
          }
        }
	# server{
        #  listen 80;
        #  server_name easy.bqeysq.com; # 此处填写你分配的二级域名,定时任务
        #  location / {
                #  proxy_set_header X-Real-IP $remote_addr;
                #  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #  proxy_set_header Host  $http_host;
                #  proxy_set_header X-Nginx-Proxy true;
                #  proxy_set_header Connection "";
                #  proxy_pass       http://127.0.0.1:8080;  # 你本机的提供http服务的地址
         # }
       # }
	server{
          listen 80;
          server_name music.bqeysq.com; # 此处填写你分配的二级域名,音乐服务
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://music;  # 你本机的提供http服务的地址
          }
        }
	server{
          listen 80;
          server_name web.bqeysq.com; # 此处填写你分配的二级域名,web绘画服务
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://music/websocket-1.0-SNAPSHOT/contro/a;  # 你本机的
# 提供http服务的地址
          }
        }
}

http模块从外到内有http块、server块、location块,同时各个模块有各自的属性元素。 整体结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http{
    server{
        location {

        }
        location {

        }
    }
    server{
        location {

        }
        location {

        }
    }
}
  1. http块:即一个http处理模块,可进行http的相关参数配置,内可以包含多个server块;
  2. upstream 块:upstream模块的内容应放于 nginx.conf 配置的 http{} 标签内,其默认的调度算法是rr (轮循 round-robin)
  3. server块:即是一个虚拟主机,需配置域名和端口,也只处理对应主机域名的http请求,内可包含多个location块;
  4. location块:对应具体的路径请求(http请求)。

upstream

定义上游服务器集群,在反向代理中proxy_pass使用,用于负载均衡。例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream boke{
    ip_hash;
    server 192.168.0.1;
    server 192.168.0.2:8080  max_fails=5 fail_timeout=30s;
    server 192.168.0.3 down;
}
server {
    location /{
        proxy_pass http://boke;
    }
}
  1. max_fails=number fail_timeout=ns设定Nginx与服务器在n秒内通信的尝试失败的次数。
  2. ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来自某一个IP的用户在后端Web服务器A上登录后,在访问该站点的其他URL,能保证其访问的还是后端web服务器A。
  3. 当某server不使用时,则在后加 down 关键字;
  4. 若希望某一服务器处理更多请求,则可以在后加权重 weight ,如weight=10,默认值为1(不能与ip_hash同时使用);

server

  1. listen 监听的端口,后可加ip地址、端口或主机名,如 listen 8080 listen 127.0.0.1:8080 listen *:8080 注意:不加端口时,默认监听80端口。
  2. server_name 用于与http请求header头部的Host匹配。 注意:后可跟多个主机名,主机名也可使用通匹符,如*.test.com。

localhost

一、 路径配置

最⾼优先级(=) 第⼆优先级(^~) 第三优先级(按照顺序匹配~,~*) 第四优先级(/)

  1. 匹配即停⽌ =:表⽰精确匹配,要么就匹配上,要么就不会被匹配。如果匹配上了,就进⼊该location块,其他都不看。 ^~:表⽰优先匹配,如果按从上往下的顺序匹配到了该^~后⾯的URL,那么就进⼊该location块,其他都不看。
  2. 按顺序匹配 ~:表⽰区分⼤⼩写的正则匹配,如果依照⾃上⽽下的顺序匹配上URL了,那就不会再继续寻找,即使⽤这个location块。 ~*:表⽰不区分⼤⼩写的正则匹配,如果依照⾃上⽽下的顺序匹配上URL了,那就不会再继续寻找,即使⽤这个location块。
  3. 通⽤匹配 /:表⽰任何请求都会被匹配到。
二、请求限制

请求限制 限制请求的方法 limit_except method {…},limit_except后跟不允许的方法,括号为可限制ip,同时注意请求方法的包含原则,如限制了GET方法,则同时也就限制了HEAD方法。如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
limit_except GET {
    allow 192.168.0.1/32;
    deny all;
}

即禁止除192.168.0.1/32地址外的,方法为GET或HEAD的请求

三、配置转发方法

proxy_method=POST; 表示不管请求是什么方法,转发后的方法为POST。

四、配置转发路径

proxy_pass http://boke; # 你本机的提供http服务的地址 注意:转发时,默认不会带上原求的Host头部,若想带上,则需加上配置 proxy_set_header Host $host;

http块、server块都可使用的配置

配置请求头header内存buffer大小

配置请求头header(包括请求行和请求头部)的内存buffer大小 client_header_buffer_size默认为client_header_buffer_size 1k ,即1k大小。当超过时,由下面的超大请求内存 large_client_header_buffers来决定是否抛错。

配置超大请求header内存buffer大小

配置超大请求header的内存buffer大小 large_client_header_buffers后跟buffer的个数和每个buffer的大小,默认为large_client_header_buffers 4 8k,即4个buffer,每个buffer为8k。 当请求行(即是协议+方法+地址)大于单个buffer大小时,则返回414(requst uri too large),当请求中的单个header大于了单个buffer大小,则返回400(bad request)。 请求行+请求头部 超过 buffer个数*单个buffer大小也会出错的。

http块、server块、location块都可使用的配置

限制请求体大小client_max_body_size

限制请求体大小 client_max_body_size ,如 client_max_body_size 10m; 即限制请求体最大为10m,默认值为1m。超过则发送403( reques entity to large)响应。

配置首页index

当路径为/时,通常会返回首页,默认为index.html页面,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location / {
    root path;
    index /index1.html /index2.html /index3.html;
}

注意:index后可跟多个地址,返回时,则返回第一个可访问的首页。示例中,则返回地址为path/index1.html。

根据http返回码重定向页面error_page

error_page后跟返回码和重定向地址,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    error_page 404  /404.html;
    error_page 400 = 200 /404.html;
    error_page 403 = /404.html;
    error_page 405 406  /404.html;
    location = /404.html {
        proxy_pass http://192.168.0.1/404.html;
    }
}

注意: error_page可跟多个返回码; 虽然重定向了,但返回码到客户端是不变的。不过,可以通过=来改,=后接新的返回码,后也可以不跟返回码,让重定向后的请求决定。

读取请求头部超时时间 client_header_timeout (默认单位为秒)

默认为client_header_timeout 60,即读取头部超时时间为60秒,超时由返回408(request time out)。

读取请求体超时时间 client_body_timeout (默认单位为秒)

默认为client_body_timeout 60,即读取请求体超时时间为60秒。

发送响应超时时间 send_timeout (默认单位为秒)

默认为send_timeout 60,即发送超时时间为60秒。

长连接时间 keepalive_timeout (默认单位为秒)

默认为 keepalive_timeout 75

一个长连接的最大请求数 keepalive_requests

默认为 keepalive_requests 100 ,即一个连接上最多可发送100次请求

设置DNS解析地址 resolver

设置DNS解析地址 resolver,后地址,可多个,如:resolver 192.168.0.1 192.168.0.2

Nginx反向代理配置

访问bqeysq.com域名时转到本地8090端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
upstream boke {
 server 127.0.0.1:8090;
}
upstream music {
 server 127.0.0.1:8081;
}

server{
          listen 80;
          server_name bqeysq.com; # 此处填写你分配的二级域名,博客短域名
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://boke;  # 你本机的提供http服务的地址
          }
        }

server{
          listen 80;
          server_name www.bqeysq.com; # 此处填写你分配的二级域名,博客长域名
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://boke;  # 你本机的提供http服务的地址
          }
        }

server{
          listen 80;
          server_name music.bqeysq.com; # 此处填写你分配的二级域名,音乐服务
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://music;  # 你本机的提供http服务的地址
          }
        }
server{
          listen 80;
          server_name web.bqeysq.com; # 此处填写你分配的二级域名,web绘画服务
          location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header Host  $http_host;
                  proxy_set_header X-Nginx-Proxy true;
                  proxy_set_header Connection "";
                  proxy_pass       http://music/websocket-1.0-SNAPSHOT/contro/a;  # 你本机的
# 提供http服务的地址
          }
        }
}

负载均衡只需要加入多个http服务地址即可

可以通过博客的音乐及绘画墙看其他两项服务!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx反向代理配置去除前缀
使用nginx做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置proxy_pass请求只会替换域名,如果要根据不同的url后缀来访问不同的服务,则需要通过如下方法:
烂猪皮
2020/09/10
1.6K0
Mac 安装nginx
相关问题处理 查看端口占用: lsof -i: 端口 kill -9 PID
OPice
2019/11/27
7530
Nginx反向代理中使用proxy_redirect重定向url
在使用Nginx做反向代理功能时,有时会出现重定向的url不是我们想要的url,这时候就可以使用proxy_redirect进行url重定向设置了。proxy_redirect功能比较强大,其作用是对发送给客户端的URL进行修改!! 语法:proxy_redirect [ default|off|redirect replacement ]; 默认:proxy_redirect default; 配置块(使用的字段):http、server、location 当上游服务器返回的响应是重定向或刷新请求(如HT
洗尽了浮华
2018/01/23
27.4K0
Nginx proxy_pass后的url加不加/的区别
针对情况1 :如果访问url = http://server/abc/test.jsp,则被nginx代理后,请求路径会便问http://proxy_pass/abc/test.jsp,将test/ 作为根路径,请求test/路径下的资源
云知识Online
2018/05/03
2.5K0
Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问
这是我上一家公司的案例总结,发现躺在草稿箱好几个月了,今天得空就整理发布一下。 先说一下开发那边提来的 2 个 case: ①、同一个域名需要反向代理到前台和后台(不同机器和端口); ②、需要采用
张戈
2018/03/21
22.7K0
Nginx通过二级目录(路径)映射不同的反向代理,规避IP+端口访问
必知的Node服务端部署:Nginx反向代理多域名,forever守护Node进程
以上就是我整理分享给各位小伙伴关于Nginx反向代理多域名,forever守护Node.js进程相关技术点,希望能够在小伙伴的工作和学习中提供一定的帮助,各位小伙伴记得点击在看,分享转发呦!同时小伙伴也可以留言多多交流呦!
胡哥有话说
2019/07/25
4.8K1
nginx配置多个server监听80端口
有时候需要部署很多个服务时,如果不想让域名的后面带上端口号这个问题应该怎么做呢,实际也是有这样的场景的,本小节来做一个学习
在水一方
2022/06/14
5.9K0
nginx配置多个server监听80端口
使用Nginx实现高效集群部署:前端与多个后端服务的完美结合
大家好,我是默语,擅长全栈开发、运维和人工智能技术。在本篇博客中,我将分享如何使用Nginx进行集群部署。这篇文章不仅适合新手学习,还能帮助有经验的开发者优化他们的部署架构。关键词:Nginx、集群部署、负载均衡、后端分发。
默 语
2024/11/22
7810
利用nginx,腾讯云免费证书制作https
之前一直在研究,https怎么弄。最近看到了腾讯云提供的免费得ssl证书,寻思把网站弄成https。 首先先去腾讯云购买一个免费得证书。 点击后填写内容, 然后下载证书 解压证书就可以看到,提供四种方
dalaoyang
2018/04/28
6.8K0
利用nginx,腾讯云免费证书制作https
nginx学习(叁):一起来看下nginx是如何处理请求的
上一节说了配置文件中可以有多个server块,所以这里我配置2个server块,来看当以不同域名(虚拟主机地址)发送请求时,nginx将该请求转发到了哪里
冰霜
2022/03/15
4310
nginx学习(叁):一起来看下nginx是如何处理请求的
Vue的Nginx前端代理配置
当用vue开发好前端需要打包时,一般都需要配置下代理方便访问后台接口,避免出现找不到链接或者跨域问题。
杨永贞
2022/01/07
2.2K0
我所有在线项目的Nginx配置内容
有几个小伙伴想看看我的Nginx是怎么配置的,我这里放出来吧。 其实没太多内容,都是基本的配置: 1、域名的代理(正向/反向); 2、IP地址获取; 3、SingleR Header配置; 4、前后端配置; 5、域名配置; 6、HTTPS配置; 7、负载配置; #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.
老张的哲学
2022/04/11
5210
nginx获取客户端请求的真实IP
客户端通过nginx代理访问后端tomcat服务器时,后端服务器收到的请求信息中只有nginx代理的IP信息,无法看到client的真实IP,
Java架构师历程
2020/02/19
4.9K0
Nginx 真实线上案例
然后需要重启Nginx。重载Nginx配置文件不建议使用,但是可以用来检测配置文件是否有错误。
收心
2022/01/19
7520
Nginx location匹配规则
上述配置,默认访问/会重定向到/my-module, 然后直接返回/data/my-module/dist下的html等静态文件。
Ryan-Miao
2019/06/18
1.9K0
nginx配置多个应用通过80端口访问
1、让域名供应商解析pan.a.com和www.a.com到自己的服务器,让pan.a.com指向localhost:8081,让www.a.com指向localhost:8080
聚优云惠
2020/02/21
3.1K0
nginx服务器配置/websocket nginx 配置笔记
location的具体用法可以参看reference的第二篇文章介绍得非常详细。我这里使用/u/匹配我的路径以/u/开头下都使用这个下面{}中的配置。
全栈程序员站长
2022/07/07
2.6K0
nginx,wss 请求后端https 接口,使用 nginx 进行代理后端接口,如何配置不需要手动在浏览器输入后端接口
wss 请求后端https 接口,使用nginx 进行代理后端接口,如何配置不需要手动在浏览器输入后端接口
一写代码就开心
2023/05/27
5.8K0
Nginx-添加并部署多个二级域名And添加SSL证书
以上几种方案中, 我会优先使用添加二级域名, 因为不同服务可能差异比较大, 而且随着项目越来越多, 后面会较难管理, 所以这篇写一下就以上这种环境应该怎么添加二级域名以及二级域名添加ssl证书
不止于python
2023/09/25
2.2K0
Nginx-添加并部署多个二级域名And添加SSL证书
nginx常用配置
proxy_redirect 该指令用来修改被代理服务器返回的响应头中的Location头域和“refresh”头域。
章工运维
2023/05/19
9250
相关推荐
Nginx反向代理配置去除前缀
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验