Nginx学习二

article/2025/10/16 19:13:33

文章目录

    • 一、proxy_set_header
      • 1.1、<span class="katex--inline">http\_host与</span>host区别
        • 1、在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host,
          • 1.1.1、 不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,
          • 1.1.2、 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息
          • 1.1.3、2.3 设置 proxy_set_header Host <span class="katex--inline">host:</span>proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 <span class="katex--inline">host:</span>proxy_port 的值
          • 1.1.4、2.4 设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口
          • 1.1.5、2.5 设置 proxy_set_header Host $host 时
          • 1.1.6、X-Real-IP
    • 二 、服务器使用nginx反向代理后,后端服务器获取访客的真实ip的失败
      • 2.1、配置反向代理端的nginx服务器
      • 2.2、在后端服务器配置如下
      • 2.3、其他配置参数
    • 三、获取多有请求头
    • 四、nginx.conf配置
      • 4.1性能优化-开启高效文件传输模式sendfile on; sendfile on; #特殊的数据传输功能
        • 4.1.1 设置参数 sendfile on
        • 4.1.2 设置参数 tcp_nopush on 说明:当有数据时,先别着急发送, 确保数据包已经装满数据, 避免了网络拥塞
        • 4.1.3 设置参数 tcp_nodelay on 说明:有时要抓紧发货, 确保数据尽快发送, 提高可数据传输效率

一、proxy_set_header

1.1、 h t t p _ h o s t 与 http\_host与 http_hosthost区别

1、在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host,

那么常用的几个设置中$proxy_host, h o s t , host, host,http_host又都表示什么意思呢?
Nginx的官网文档中说下面这两条是做反代时默认的,所以$proxy_host 自然是 proxy_pass后面跟着的host了

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

如果客户端发过来的请求的header中有’HOST’这个字段时,$http_host和$host都是原始的’HOST’字段比如请求的时候HOST的值是www.csdn.net 那么反代后还是www.csdn.ne

1.1.1、 不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,

参考http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

server {listen 8090;server_name _;location / {proxy_pass http://172.31.5.0:5000;}
}
1.1.2、 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息
server {listen 8090;server_name _;location / {proxy_set_header Host $host;proxy_pass http://172.31.5.0:5000;}
}
1.1.3、2.3 设置 proxy_set_header Host h o s t : host: host:proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 h o s t : host: host:proxy_port 的值
server {listen 8090;server_name _;location / {proxy_set_header Host $host:$proxy_port;proxy_pass http://172.31.5.0:5000;}
}
1.1.4、2.4 设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口
server {listen 8090;server_name _;location / {proxy_set_header Host $http_host;proxy_pass http://172.31.5.0:5000;}
}
1.1.5、2.5 设置 proxy_set_header Host $host 时

浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息。此时代码中如果有重定向路由,那么重定向时就会丢失端口信息,导致 404

server {listen 8090;server_name _;location / {proxy_set_header Host $host;proxy_pass http://172.31.5.0:5000;}
}
1.1.6、X-Real-IP

下面我们看一下有多级代理存在时如何获取客户端真实IP.

首先要明确在header里面的 X-Real-IP只是一个变量,后面的设置会覆盖前面的设置(跟X-Forwarded-For的追加特性区别明显),所以我们一般只在第一个代理设置proxy_set_header X-Real-IP r e m o t e a d d r ; 就好了,然后再应用端直接引用 remote_addr;就好了,然后再应用端直接引用 remoteaddr;就好了,然后再应用端直接引用http_x_real_ip就行.
参考文献:https://blog.csdn.net/xiaoxiao_yingzi/article/details/92835704

二 、服务器使用nginx反向代理后,后端服务器获取访客的真实ip的失败

公司目前使用的业务是前端使用nginx做为反向代理,后端使用nginx作为web服务器,由于前期没有配置,导致后端服务器记录的访问日志的ip全部是来着前端反向代理服务器的。
如果需要后端服务器记录访客真是ip。需要进行如下配置:

2.1、配置反向代理端的nginx服务器

在server后面增加如下这三个参数用于记录IP:

  proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
server {client_header_buffer_size 16k;large_client_header_buffer 4 64k;fastcgi_buffer 8 128k;send_timeout 60;client_max_body_size 20M;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

2.2、在后端服务器配置如下

在后端服务器的nginx_http处配置如下:
配置log_format信息, 后续的日志后面也需要加上main这个参数

log_format  main '$remote_addr $remote_user [$time_local] "$request" '           '$status $body_bytes_sent "$http_referer" '                   '$http_user_agent $http_x_forwarded_for $request_time $upstream_response_time $upstream_addr $upstream_status'; 

在这里插入图片描述
以上即可记录访客的真实ip地址
在这里插入图片描述

2.3、其他配置参数


`参数                      说明                                         示例``$remote_addr             客户端地址                                    202.28.65.253``$remote_user             客户端用户名称                                --``$time_local              访问时间和时区                                18``/Jul/2012``:17:00:01 +0800``$request                 请求的URI和HTTP协议                           ``"GET /article-10000.html HTTP/1.1"``$http_host               请求地址,即浏览器中你输入的地址(IP或域名)     www.wang.com 192.168.104.100``$status                  HTTP请求状态                                  200``$upstream_status         upstream状态                                  200``$body_bytes_sent         发送给客户端文件内容大小                        1547``$http_referer            url跳转来源                                   https:``//www``.baidu.com/``$http_user_agent         用户终端浏览器等信息                           "Mozilla``/4``.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident``/4``.0; SV1; GTB7.0; .NET4.0C;``$ssl_protocol            SSL协议版本                                   TLSv1``$ssl_cipher              交换数据中的算法                               RC4-SHA``$upstream_addr           后台upstream的地址,即真正提供服务的主机地址     10.10.10.100:80``$request_time            整个请求的总时间                               0.205``$upstream_response_time  请求过程中,upstream响应时间                    0.002`

三、获取多有请求头

  ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();HttpServletRequest request = getRequest();
//获取所有请求头名称Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) {String name = headerNames.nextElement();//根据名称获取请求头的值String value = request.getHeader(name);System.out.println(name+"---"+value);}

四、nginx.conf配置

4.1性能优化-开启高效文件传输模式sendfile on; sendfile on; #特殊的数据传输功能

tcp_nopush on;

参数sendfile on 用于开启文件高效传输模式,同时将tcp_nopush on 和tcp_nodelay on 两个指令设置为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率

4.1.1 设置参数 sendfile on

参数语法 sendfile on | off;
放置位置 http,server,location,if in location

4.1.2 设置参数 tcp_nopush on 说明:当有数据时,先别着急发送, 确保数据包已经装满数据, 避免了网络拥塞

参数语法 tcp_nopush on | off;

放置位置 http,server,location

4.1.3 设置参数 tcp_nodelay on 说明:有时要抓紧发货, 确保数据尽快发送, 提高可数据传输效率

参数语法 tcp_nodelay on | off;

放置位置 http,server,location
sendfile on配合使用(2)(3) 但(2)(3)只能选其一特别注意


在主配置文件nginx.conf中配置worker_processes  2;
worker_cpu_affinity 0101 1010;
error_log logs/error.log;#配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535;user www www;
events {#单个进程允许的客户端最大连接数worker_connections  20480;#使用epoll模型use epoll;
}
http {include       mime.types;default_type  application/octet-stream;#sendfile        on;keepalive_timeout  65;#访问日志配置log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#虚拟主机include /application/nginx/conf/extra/www.conf;include /application/nginx/conf/extra/blog.conf;include /application/nginx/conf/extra/bbs.conf;include /application/nginx/conf/extra/edu.conf;include /application/nginx/conf/extra/phpmyadmin.conf;include /application/nginx/conf/extra/status.conf;#nginx优化----------------------#隐藏版本号server_tokens on;#优化服务器域名的散列表大小 server_names_hash_bucket_size 64;server_names_hash_max_size 2048;#开启高效文件传输模式sendfile on;#减少网络报文段数量#tcp_nopush on;#提高I/O性能tcp_nodelay on;
}

参看文献:

https://blog.csdn.net/u011897301/article/details/72486278
https://www.cnblogs.com/faberbeta/p/nginx008.html
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header
https://blog.csdn.net/diyiday/article/details/80827437
https://juejin.cn/post/7003639916139642893
https://blog.csdn.net/weixin_34209851/article/details/91681937
https://blog.csdn.net/xiaoxiao_yingzi/article/details/92835704

http://chatgpt.dhexx.cn/article/8yocG92n.shtml

相关文章

nginx学习一

nginx 安装&#xff1a; 1、 ./configure 如果报错 error: C compiler cc is not found 如果没有安装就安装:yum install –y gcc 如果还报错看看是不是安装: yum install –y zlib zlib-devel 2、 安装 make 3、 make install 4、 安装完后可以查看到目录 5、 启动 nginx …

nginx学习记录

一、docker安装nginx和配置文件 &#xff08;1&#xff09;docker拉取镜像 docker pull nginx &#xff08;2&#xff09;创建容器 # 在/root⽬录下创建nginx⽬录⽤于存储nginx数据信息 mkdir ~/nginx cd ~/nginx mkdir conf cd conf # 在~/nginx/conf/下创建nginx.conf⽂件…

尚硅谷nginx学习笔记

尚硅谷nginx学习笔记 1.nginx相关概念1.1什么是nginx&#xff1f;1.2正向和反向代理1.3负载均衡1.4动静分离 2.nginx在linux中的安装与启动3.nginx的常用命令4.nginx的配置文件5.nginx配置实例5.1反向代理准备工作5.2反向代理实例一5.3反向代理实例二5.4负载均衡实例5.5动静分离…

Nginx学习(一)

系统版本CentOS Linux release 7.6.1810 (Core) Nginx作用 反向代理正向代理负载均衡HTTP服务器(包含动静分离) 环境确认 1.关闭iptables规则 如果启动的iptables防火墙不想关闭的话&#xff0c;可以通过iptables -F 来清除防火墙关闭。然后通过iptables -L查看 2.停用seli…

NGINX学习记录-基础入门篇

学习《NGINX 经典教程》林静&#xff0c;刘旭峰&#xff0c;章澍&#xff0c;廖健雄&#xff0c;宗兆伟 ... 著 目录 一、Nginx优点 二、功能(应用场景) 反向代理。 负载均衡 静态缓存 Web服务器 安全和访问控制 三、nginx安装 四、启动、停止和重载nginx 五、配置文…

Nginx学习总结(1):Nginx简介

(最近&#xff0c;部门组织了好几个技术兴趣小组&#xff0c;对当前的热门技术进行研究。我加入了Nginx学习小组&#xff0c;与几个同事一道围绕Nginx来进行研究和学习。从今天起&#xff0c;我会陆陆续续发一系列有关Nginx的学习总结。本文是系列之一&#xff1a;Nginx简介。)…

学习nginx

Nginx笔记 安装nginxwget -c https://nginx.org/download/nginx-1.20.1.tar.gz1、创建软链路ls /usr/local/nginx/sbin/nginx /usr/bin/ 2、前端部署配置 Conf 在这里插入图片描述 3、启动服务 由于软链路 可以直接 nginx 启动&#xff08;任意目录&#xff09; 停止 nginx -s…

nginx学习日记

nginx介绍 1.什么是nginx? nginx就是c语言开发的一个高性能HTTP和反向代理Web服务器以及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器 nginx是轻量级的。 2.什么是反向代理&#xff1f; 代理服务可以简单的分为正向代理和反向代理。 正向代理&#xff1a;就是代理…

Nginx学习笔记总结:初次认识 Nginx

2022 年 4月 16 日 百思不得小赵 &#x1f50d;点此进入博客主页 —— 新时代的农民工 &#x1f64a; —— 换一种思维逻辑去看待这个世界 &#x1f440; 今天是加入CSDN的第1141天。觉得有帮助麻烦&#x1f44f;点赞、&#x1f340;评论、❤️收藏啦。 概述 Nginx是一个高性能…

Nginx服务器学习

学习思维导图 Nginx服务架构说明 Nginx采用master-worker的架构&#xff0c;和tomacat的按路径匹配一个节点线程进行处理方式不同&#xff0c;Nginx是直接让worker来先抢夺资源也就是请求&#xff0c;然后在去处理&#xff0c;每个worker保持为一个独立的进程。 Nginx服务的实际…

nginx学习,看这一篇就够了

nginx学习&#xff0c;看这一篇就够了&#xff1a;下载、安装。使用&#xff1a;正向代理、反向代理、负载均衡。常用命令和配置文件,很全_冯安晨-CSDN博客_nginx 代理 文件下载文章目录前言一、nginx简介1. 什么是 nginx 和可以做什么事情2.Nginx 作为 web 服务器3. 正向代理4…

Nginx学习+安装

目录 一、Nginx介绍 二、Nginx下载和安装 1.安装过程 三、了解目录结构 小知识点&#xff1a;树形结构目录展示 四、常用命令 五、配置文件结构 六、具体应用 1.部署静态资源 2.反向代理 了解正向代理 反向代理 3.负载均衡 重中之重&#xff1a;更详细的内容可以访…

Nginx学习与安装

Nginx学习与安装 一、Nginx介绍二、Nginx 安装2.1 安装 pcre-8.44.tar.gz2.2 安装openssl与zlib2.3 安装nginx2.4 Nginx 命令 Nginx 配置文件 一、Nginx介绍 是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx以事件驱动的方式编写…

手把手学习nginx基本配置

相信很多人都听过nginx&#xff0c;这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢&#xff1f;可能很多人未必了解。 说到反向代理&#xff0c;可能很多人都听说&#xff0c;但具体什么是反向代理&#xff0c;很多人估计就不清楚了。摘一段百度百科上的描…

Nginx学习整理|入门记录

目录 1. Nginx概述 1.1 Nginx介绍 1.2 Nginx下载和安装 1.3 Nginx目录结构 2. Nginx命令 3. Nginx配置文件结构 4. Nginx具体应用 4.1 部署静态资源 4.2 反向代理 4.3 负载均衡 1. Nginx概述 1.1 Nginx介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件…

nginx学习总结

简介 静态资源服务器&#xff0c;反向代理&#xff0c;负载均衡等&#xff0c;这些场景下&#xff0c;nginx无处不在。但是本人是在解决单个tomcat承受不了并发量的前提下&#xff0c;才走进的nginx。以下都是个人的总结&#xff0c;如果有不对的话&#xff0c;可以指出来&…

Nginx入门学习

Nginx快速入门 Nginx快速入门&#xff0c;了解什么是Nginx&#xff0c;正向代理&#xff0c;反向代理&#xff0c;负载均衡的概念&#xff0c;学会Nginx的安装和常用的命令&#xff0c;并且能实际场景应用Nginx 什么是Nginx&#xff1f; Nginx (engine x) 是一个高性能的HTTP和…

Nginx学习

目录 1. Nigix简介1.1 什么是 Nginx?1.2 Nginx的作用&#xff1f;1.3 正向代理和反向代理1.4 Windows上安装Nginx1.5 Linux上安装Nginx 2. Nginx常用命令docker 部署nginx 1. Nigix简介 1.1 什么是 Nginx? Nginx是一个高性能的HTTP和反向代理web服务器&#xff08;随着客户…

Nginx教程(小白必看,看了必会,不看血亏),

Notice 测试请打开浏览器禁止缓存 Notice:再使用前&#xff0c;请打开浏览器 F12 然后网络 然后点禁用缓存&#xff0c;避免nginx配置后磁盘缓存的情况。而且&#xff0c;请确认host没问题。 备注:你本地设置的host对服务器反向代理后的就没用了 一、介绍 概述 Nginx是lgor…

学习Nginx,看完这篇超详细的文章就够了

目录 本文简介一、Nginx的基本概念1.1、Nginx是什么&#xff1f;1.2、Nginx能帮助我们做些什么&#xff1f;1.3、Nginx的特性 二、Nginx的安装2.1、环境介绍2.2、安装Nginx2.3、Docker安装运行Nginx 三、Nginx的常用命令介绍3.1、操作Nginx【Centos6和7通用】3.2、命令总结 四、…