nginx相关问题记录

1. net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 问题解决

nginx丢包问题。比如访问某个页面,接口请求都是OK的,但是页面一片空白。看看console答应日志net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK) 问题解决 说是某个js文件没有下载下来。

解决办法:
server节点中配置以下配置,根据具体情况,可以适当调整数值。然后重启nginx。

proxy_buffer_size 1024k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 16 1024k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 2048k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 2048k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传

2. 升级nacos-client2.0+ 报错 ,nacos-server集群环境时UNAVAILABLE: io exception

具体报错如下:

Server check fail, please check server localhost ,port 9848 is available , error ={}
java.util.concurrent.ExecutionException: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

解决办法:
按照nacos官网的意思就是nginx要多开放出来两个端口,供客户端与服务端,服务端与服务端之间通信。

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口与主端口的偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。

比如集群环境:

nginx代理路径(以后19服务nacos使用这个,账户密码都是之前)
http://172.31.129.19:8848/nacos/index.html
三台nacos: /home/cloud/nacos2.0.3
http://172.31.129.19:1950/nacos/index.html
http://172.31.129.19:1960/nacos/index.html
http://172.31.129.19:1970/nacos/index.html

那么配置应该如下:

stream {
    upstream nacos-server-grpc9848 {
      server 172.31.129.19:2950;
      server 172.31.129.19:2960;
      server 172.31.129.19:2970;
    }

    server {
        listen 9848;
        proxy_pass nacos-server-grpc9848;
    }

    upstream nacos-server-grpc9849 {
      server 172.31.129.19:2951;
      server 172.31.129.19:2961;
      server 172.31.129.19:2971;
    }

    server {
        listen 9849;
        proxy_pass nacos-server-grpc9849;
    }
}

http {
    upstream nacos-server {
      server 172.31.129.19:1950;
      server 172.31.129.19:1960;
      server 172.31.129.19:1970;
    }

    server {
      listen 8848;
      server_name  localhost;
      location /nacos/ {
        proxy_pass http://nacos-server/nacos/;
      }
    }
}

3. 下载经过nginx代理后,丢包,下载不全文件,导致下载后无法打开

问题原因: 可能是nginx配置限制了下载的大小,还有可能是超时等等。

解决办法1: 把下面的必要配置配置到nginx,值大小根据自己的需求配置,重启nginx。

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  120s 120s;

    server {
   #     listen       80;
   #     server_name  localhost;

        client_max_body_size 5000m;
        proxy_max_temp_file_size 5000m;
        proxy_read_timeout 3600s;
        proxy_send_timeout       3600s;

	# 	location / {
	#             return 302 /user-center-portal/;
	#	}
		# ...
	}
}

如果还是解决不了问题,也有可能是nginx访问临时目录没有权限的问题。

解决办法2:

# 授权 ${NGINX_HOME} 为nginx的安装目录,不同的安装方法,可能路径不一样
chmod -R 777 ${NGINX_HOME}/uwsgi_temp/
chmod -R 777 ${NGINX_HOME}/client_body_temp
chmod -R 777 ${NGINX_HOME}/fastcgi_temp
chmod -R 777 ${NGINX_HOME}/proxy_temp
chmod -R 777 ${NGINX_HOME}/scgi_temp
chmod -R 777 ${NGINX_HOME}/uwsgi_temp

4. $http_host 与 $host 差别

proxy_set_header Host $http_host;
# proxy_set_header Host $host;

使用这个配置,当你的 Nginx 服务器作为反向代理服务器时,可以确保后端服务器接收到的请求中包含正确的 Host 信息。这对于后端服务器正确处理请求、生成正确的链接、处理重定向等方面非常重要。

详解:

  • proxy_set_header:这是 Nginx 用于设置向代理服务器请求时所带的 HTTP 头字段的指令。
  • Host:这是 HTTP 请求头的一部分,通常用于指定请求的目标主机和端口号。在虚拟主机的配置中尤其重要,因为一个物理服务器上可能托管了多个域名,服务器需要通过 Host 字段来判断请求的目的地。
  • $http_host:这是一个 Nginx 变量,它包含了原始请求中的 Host 头的值,包括域名和端口号(如果指定了端口号的话)。这个变量确保了请求转发到后端服务器时,后端服务器可以接收到原始的 Host 信息。
  • $host 变量仅包括请求的主机名。

5. 请求IP透传到服务器

Nginx 可以作为反向代理服务器,将请求转发到指定的后端服务器,并且在转发请求时附加了一些额外的头信息,以便后端服务器能够获取到客户端的真实信息。

 location /gateway/ {
      proxy_redirect off ;
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header REMOTE-HOST $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://172.98.xxx.xxx:8080/;
    }

  • proxy_redirect off;:禁用代理服务器对响应中的 Location 和 Refresh 头字段的修改。通常在反向代理中不需要进行重定向修改。
  • proxy_set_header Host $http_host;:设置请求头中的 Host 字段为原始请求的 Host 值。保持 Host 字段的原样是非常重要的,因为后端服务器可能需要使用 Host 来处理请求。
  • proxy_set_header X-Real-IP $remote_addr;:设置请求头中的 X-Real-IP 字段为客户端的真实 IP 地址。这样可以将客户端的真实 IP 传递给后端服务器,以便后端服务器获取到客户端的真实地址。
  • proxy_set_header REMOTE-HOST $remote_addr;:设置请求头中的 REMOTE-HOST 字段为客户端的 IP 地址。这个字段的作用类似于 X-Real-IP 字段,不同之处在于可以根据需要自定义字段名。
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:将请求头中的 X-Forwarded-For 字段设置为原始客户端 IP 地址,并将代理服务器的 IP 地址追加到该字段中。这样可以让后端服务器了解到请求的真实来源。
  • proxy_pass http://172.98.xxx.xxx:8080/;:指定代理服务器转发请求到的后端服务器地址。

一般使用,以下配置,就可以实现标准请求头ip透传。

  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以得出关于nginx的攻击记录有以下几种情况: 1. 使用$http_user_agent变量进行攻击:在nginx配置文件中,通过判断请求头中的User-Agent字段是否包含特定的字符串,如"must-revalidate",如果包含则返回403禁止访问。这种攻击记录可以通过检查日志中的$http_user_agent字段来发现\[1\]。 2. 使用deny指令屏蔽特定IP地址进行攻击:在nginx配置文件中,通过deny指令将特定的IP地址屏蔽,从而阻止其访问。这种攻击记录可以通过检查日志中的IP地址和deny指令的配置来发现\[2\]。 3. 通过篡改请求头中的IP地址进行攻击:攻击者可以通过修改请求头中的IP地址字段来规避IP限制。在实际应用中,对于IP的限制需要明确自己的需求场景,并知道如何正确获取IP地址进行限制。这种攻击记录可以通过检查日志中的remote_addr和http_x_forwarded_for字段来发现\[3\]。 综上所述,nginx的攻击记录包括使用特定User-Agent字段进行攻击、屏蔽特定IP地址进行攻击以及通过篡改请求头中的IP地址进行攻击。 #### 引用[.reference_title] - *1* *2* [nginx预防常见攻击](https://blog.csdn.net/yueaini10000/article/details/103426202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Nginx一次肉鸡攻击记录](https://blog.csdn.net/weixin_43950985/article/details/103930185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值