Nginx 使用域名反向代理报 400 Request Header Or Cookie Too Large 解决方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 使用域名反向代理报 400 Request Header Or Cookie Too Large 解决方案相关的知识,希望对你有一定的参考价值。
参考技术A 反向代理报错> 400 Request Header Or Cookie Too Large
假设需要重定向到 api.jianshu.com
报错的配置如下:
修改为:
即可.
猜测,参考引用: nginx配置反向代理或跳转出现400问题处理记录
干货|基于nginx反向代理的同IP多域名解析
每天读一篇一线开发者原创好文
▍作者简介:
朱磊是开源软件爱好者,致力于网站部署、运维领域解决方案的研究。这篇文章主要讲述了如何使用nginx在有限的IP资源下进行多域名服务器的部署设计、实现与测试,希望对网站部署、运维人员能有所帮助。
基于nginx反向代理的同IP多域名解析
1 网站架构变化
一般情况下,不存在关联的多个网站的架构为:
2 nginx的安装与使用
yum安装nginx
#因nginx的依赖关系较多,建议采取yum的安装方式
yum install nginx
nginx的配置文件为
/etc/nginx/nginx.conf
nginx的启动与停止
#开启nginx,默认配置文件为/etc/nginx/nginx.conf
nginx
#重启加载nginx配置
nginx -s reload
#重启nginx
nginx -s reopen
#优雅的关闭nginx,完成当前请求
nginx -s quit
#快速关闭nginx
nginx -s stop
3 nginx反向代理配置
修改主配置文件/etc/nginx/nginx.conf
user root root;
worker_processes auto; #由nginx自己判断最适合的工作进程数
error_log /var/log/nginx/error.log; #nginx错误日志
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
use epoll;
worker_connections 1024;
}
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"'; #nginx日志格式
access_log /var/log/nginx/access.log main; #nginx访问日志
client_max_body_size 200M; #代理用户请求缓冲区大小
sendfile on;
keepalive_timeout 65;
gzip on;
client_body_buffer_size 256k;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
proxy_connect_timeout 300s; #反向代理连接超时时间
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_ignore_client_abort on;
include /etc/nginx/conf.d/*.conf; #各个代理分开配置,便于扩展
}
修改各个代理配置文件/etc/nginx/conf.d/*.conf
vim /etc/nginx/conf.d/a.conf
server
{
listen 80;
server_name www.a.com; #定义访问域名
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /var/log/web/a.log; #指定nginx访问日志
}
vim /etc/nginx/conf.d/b.conf
server
{
listen 80;
server_name www.b.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.12:80;
}
access_log /var/log/web/b.log;
}
vim /etc/nginx/conf.d/c.conf
server
{
listen 80;
server_name www.c.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.13:80;
}
access_log /var/log/web/c.log;
}
将配置文件置于/conf.d/ 文件夹下是为了方便扩展,后期如果有新增域名,直接新增配置文件重新加载nginx配置文件即可。
4 多域名解析测试
4.1 真实域名和公网IP的测试
4.2 基于内网DNS的解析测试
DNS服务器的搭建
参考文档:在Windows7 系统上部署DNS服务器,http://blog.csdn.net/hyman_c/article/details/53560891
修改域名解析配置文件name.conf:
#增加如下解析配置
// a.com
zone "a.com" IN {
type master;
file "a.com.zone";
};
// b.com
zone "b.com" IN {
type master;
file "b.com.zone";
};
// c.com
zone "c.com" IN {
type master;
file "c.com.zone";
};
新增配置文件:a.com.zone、b.com.zone、c.com.zone
#a.com.zone
a.com. IN SOA ns1.a.com. root.a.com. (
2007091701 ; Serial
30800 ; Refresh
7200 ; Retry
604800 ; Expire
300 ) ; Minimum
IN NS ns1.a.com.
* IN A 192.168.1.10
#b.com.zone
b.com. IN SOA ns1.b.com. root.b.com. (
2007091701 ; Serial
30800 ; Refresh
7200 ; Retry
604800 ; Expire
300 ) ; Minimum
IN NS ns1.b.com.
* IN A 192.168.1.10
#c.com.zone
c.com. IN SOA ns1.c.com. root.c.com. (
2007091701 ; Serial
30800 ; Refresh
7200 ; Retry
604800 ; Expire
300 ) ; Minimum
IN NS ns1.c.com.
* IN A 192.168.1.10
在win7上将DNS服务器设置为:127.0.0.1,即可完成DNS服务器的配置。
访问测试
在这台win7电脑上,直接浏览器访问www.a/b/c.com域名,能够正常访问各自的网站,完成验证。
5 nginx服务器其他主题探讨
5.1 nginx服务器双机问题
当使用nginx代理多个网站时,nginx服务器本身的稳定性就显得尤为重要,我们可以选择keepalived软件搭建高可用的nginx双机环境。
关于使用keepalived进行nginx双机的进一步讨论,可见文档:keepalived介绍及nginx双机热备的实现,https://dev.zte.com.cn/topic/#/38590
5.2 网站服务器负载均衡问题
前面提到的网站均只有一个服务器,当网站访问量上升以后就需要搭建网站服务器集群,而此时也需要在nginx服务器上做出对应的配置,以网站www.a.com为例,修改配置文件:/etc/nginx/conf.d/a.conf
upstream www.a.com {
server 192.168.1.111;
server 192.168.1.112;
}
server
{
listen 80;
server_name www.a.com; #定义访问域名
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://www.a.com;
}
access_log /var/log/web/a.log; #指定nginx访问日志
}
即在配置文件中增加upstream配置网站服务器集群,然后重新载入nginx配置文件。
关于负载均衡的策略等问题的进一步探讨,可见文档:nginx负载均衡介绍及后端节点宕机的处理,https://dev.zte.com.cn/topic/#/38195
参考资料
搭建nginx反向代理用做内网域名转发,http://www.ttlsa.com/nginx/use-nginx-proxy/
nginx 域名跳转一例~~~(rewrite、proxy),http://blog.51cto.com/storysky/486338
Nginx多域名多Server反向代理配置,https://www.cnblogs.com/tonykan/p/3507082.html
在Windows7 系统上部署DNS服务器,http://blog.csdn.net/hyman_c/article/details/53560891
如有疑问,欢迎交流
以上是关于Nginx 使用域名反向代理报 400 Request Header Or Cookie Too Large 解决方案的主要内容,如果未能解决你的问题,请参考以下文章