nginx配置详解

简介: nginx配置详解

1.nginx中配置(获取用户真实ip):

#可在nginx中正则获取第一个放进请求头中
set $Real $proxy_add_x_forwarded_for;   
 if ( $Real ~ (\d+)\.(\d+)\.(\d+)\.(\d+),(.*) ){    
     set $Real $1.$2.$3.$4;    
     }
   proxy_set_header  X-Real-IP  $remote_addr;  #获取上一级代理的ip
   proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; #如果有多级就获取第一个(用户》运营商(ADSL)》CDN》Nginx)
   eg:
   location / {   
    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.”坑“,项目上线深深上了一课,研究了一晚解决将项目部署到线上token取不到的BUG,原因是nginx转发携带请求头字段是不支持有’_‘

location / {   
 proxy_set_header            Host $host;
 proxy_set_header            Author_token $remote_addr;#自定义header头无效    
 proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
 }

解决办法:nginx underscores_in_headers默认off 忽略了下划线 也可以使用减号代替 我是在后端将token放请求头中,nginx找不到

3. proxy_set_header中p r o x y h o s t , proxy_host,proxyhost,host,$http_host的区别,客户端和nginx请求头中都有同一个字段,则选择客户端带的

``

在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host,h t t p h o s t , http_host,httphost,proxy_host,那么这几个有什么区别呢?Nginx的官网文档中说下面这两条是做反代时默认的,所以$proxy_host 自然是 proxy_pass后面跟着的host了proxy_set_header Host p r o x y h o s t ; p r o x y s e t h e a d e r C o n n e c t i o n c l o s e ; 如果客户端发过来的请求的 h e a d e r 中有’ H O S T ’这个字段时, proxy_host;proxy_set_header Connection close;如果客户端发过来的请求的header中有’HOST’这个字段时,proxyhost;proxysetheaderConnectionclose;如果客户端发过来的请求的header中有HOST这个字段时,http_host和h o s t 都是原始的’ H O S T ’字段比如请求的时候 H O S T 的值是 w w w . c s d n . n e t 那么反代后还是 w w w . c s d n . n e t 如果客户端发过来的请求的 h e a d e r 中没有有’ H O S T ’这个字段时,建议使用 host都是原始的’HOST’字段比如请求的时候HOST的值是www.csdn.net 那么反代后还是www.csdn.net如果客户端发过来的请求的header中没有有’HOST’这个字段时,建议使用host都是原始的HOST字段比如请求的时候HOST的值是www.csdn.net那么反代后还是www.csdn.net如果客户端发过来的请求的header中没有有HOST这个字段时,建议使用host,这表示请求中的server name。

### 4.proxy_set_header配置实例
```bash
windows客户端(请求web服务):192.168.1.1
nginx作为反向代理服务器:192.168.1.136
nginx作为后端web服务器:192.168.1.137
前提条件:配置nginx转发到后端服务器
server {   
  listen 8080;    
  server_name 192.168.1.136;
   location / {     
         root "/www/html";     
         index index.html;     
         #auth_basic "required auth";     
         #auth_basic_user_file "/usr/local/nginx/users/.htpasswd";     
         error_page 404 /404.html;
         }
   location /images/ {    
         root "/www";     
         rewrite ^/images/bbs/(.*\.jpeg)$ /images/$1 break;     
         rewrite ^/images/www/(.*)$ http://192.168.1.136/$1 redirect;
         }
   location /basic_status {     
         stub_status;
         }
   location ^~/proxy_path/ { 
         root "/www/html";     
         index index.html;     
         proxy_pass http://192.168.1.137/;     
         proxy_set_header Host $host;     
         proxy_set_header X-Real-IP $remote_addr;     
         #proxy_set_header X-Forwarded-For $remote_addr;     
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
    location ^~/proxy_path/ {
         root "/www/html";     
         index index.html;     
         proxy_pass http://192.168.1.137/;
         }
    }
将左侧匹配到的/proxy_path/开头的url全部转发到后端服务器192.168.223.137

Nginx反向代理Tomcat访问报错400问题

线上用nginx反向代理tomcat访问,配置完成后,直接访问tomcat完全正常,但是只要在nginx添加反向代理tomcat,访问nginx就会报错400。

原因和解决办法:

1)后端服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,如果nginx代理层不重写请求头中的host字段,将会导致请求失败,报400错误。

解决办法:proxy_set_header Host $http_host;

2)nginx配置中header头部信息的host不能被配置重了。tomcat没有对headers中的host进行唯一校验。

解决办法(下面两个要去掉一个):proxy_set_header Host $host;proxy_set_header Host $http_host; #去掉这一行

location写法:

(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)

以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。

以^~ 开头,表示uri以某个常规字符串开头,不是正则匹配

以~ 开头,表示区分大小写的正则匹配;

以~* 开头,表示不区分大小写的正则匹配

以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到

目录
相关文章
|
2月前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
2月前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
285 0
|
2月前
|
应用服务中间件 Linux nginx
Jetson 环境安装(四):jetson nano配置ffmpeg和nginx(亲测)之编译错误汇总
这篇文章是关于在Jetson Nano上配置FFmpeg和Nginx时遇到的编译错误及其解决方案的汇总。
96 4
|
16天前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
29天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
147 1
nginx配置反向代理404问题
|
13天前
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
67 1
|
2月前
|
编解码 Ubuntu 应用服务中间件
Jetson 环境安装(三):jetson nano配置ffmpeg和nginx(亲测)
本文介绍了在NVIDIA Jetson Nano上配置FFmpeg和Nginx的步骤,包括安装、配置和自启动设置。
168 1
Jetson 环境安装(三):jetson nano配置ffmpeg和nginx(亲测)
|
1月前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
48 7
|
2月前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
2月前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
171 7