remote_addr 的一些认识
关于nginx - $remote_addr的解释 nginx的自带变量 $remote_addr 代表客户端的IP remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的. 当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理(比如clb),那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。 但是实际场景中,我们即使有代理,也需要将$remote_addr设置为真实的用户IP, 以下利用with-http_realip_module模块实现安装(nginx或者openresty编译需要加--with-http_realip_module)1./configure ...... --with-http_realip_module 添加如下配置123456789101112131415# 从哪个header头检索出要的IP地址real_ip_...
缓存的使用,开启gzip以及各种header的操作
Nginx里Header修改 修改Nginx默认Header 修改普通请求的HeaderNginx内置的模块暂时仅支持修改响应头,使用add_header。其中: add_header 来自内置模块ngx_http_headers_module,用于设置response header。参考:http://www.cnblogs.com/linxiong945/p/4174262.html 如果需要设置普通请求的request header,则需要单独安装headers-more-nginx-module模块。该模块提供了more_set_headers,more_set_input_headers分别用于设置请求、响应头。 示例: 12345678910location ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param LOG_ID $request_id; more_set_input_headers "...
Nginx 通过正则获取 URL 中的某个值
例子:如果url符合正则格式并且$temp_flag正则匹配11111,则代理到bbb,否则代理到aaa123456789set $proxy_path aaa;# 此处通过正则获取url第一个括号里的值,赋值给temp_flagif ( $request_uri ~ ^\/([0-9a-z]+)\/(.*) ){ set $temp_flag $1;}if ($temp_flag ~ (^11111$)) { set $proxy_path bbb;}proxy_pass http://$proxy_path; uri和request_uri的区别 request_uri: 这个变量等于从客户端发送来的原始请求URI(最原始的),包括参数,它不可以进行修改。$uri变量反映的是重写后/改变的URI(最终的),不包括主机名。例如:"/foo/bar.php?arg=baz" uri: 这个变量指当前的请求URI,不包括任何参数(见$args)。这个变量反映任何内部重定向或i...
Nginx location 优先级
nginx location语法第一优先级 = : 完全匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。 第二优先级 ^~ : 普通字符匹配。优先使用前缀匹配。如果匹配成功,则不再匹配其他location。 第三优先级 ~ : 区分大小写匹配 第三优先级 !~ : 区分大小写不匹配 第三优先级 ~* : 不区分大小写匹配 第三优先级 !~* : 不区分大小写不匹配 第四优先级 /{uri} : 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。 第四优先级 / : 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。 123456789101112131415161718192021222324location = / {# 只匹配 / 查询。}location / {# 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。}location ^~ /p_w_picpaths/ {# 匹配任何已 /p_w_picp...
Nginx 的 server_name
listen 后可以指定 IP:port的IP地址和端口 仅IP(端口将默认为80) 仅port,将监听所有接口的这个port 到某个Unix socket的路径(在服务器间转发请求的时候会用到) 在将listen的值与请求进行匹配之前,Nginx会先将listen的值中所缺省的部分补充完整。然后将优先匹配准确的IP,如果不存在完全准确匹配的IP才会匹配到0.0.0.0,如果有多个IP:port匹配度相同,Nginx将会继续检查server_name server_name 指令Nginx将server_name与请求头中的Host进行匹配,匹配的顺序: 优先选择第一个精确匹配到的block。12345server { listen 80; server_name host.example.com; ...} 选择以*开头的进行匹配,并优先选择最长的。12345server { listen 80; server_name *.example.com; ...} 选择以*结尾的进行匹配,并优先选...
关于 Nginx rewrite 的妙用
Rewrite模块现在 Nginx 已经成为很多公司作为前端反向代理服务器的首选,在实际工作中往往会 遇到很多跳转(重写 URL)的需求。比如更换域名后需要保持旧的域名能跳转到新的域名 上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。如果在后端使用的 Apache 服务器,虽然也能做跳转,规则库也很强大,但是用 Nginx 跳转效率会更高 Rewrite功能rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标记位实现URL重写以及重定向。比如:更换域名后需要保持旧的域名能跳转到新的域名上、某网页发生改变需要跳转到新的页面、网站防盗链等等需求。 rewrite 只能在server {}location {}if {}中,并且默认只能对域名后边的除去传递的参数外的字符串起作用 例如:京东登录账号,就是一个跳转 只针对“?前域名后”重写 Rewrite跳转场景 可以调整用户浏览的 URL,看起来更规范,合乎开发及产品人员的需求 为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态 URL 地址伪装成静态地址提供服务 网址换新域名...
整理使用 Nginx 时碰到的问题
NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)解决办法:在nginx中的对应的反向代理配置如下内容,即可解决: 1234proxy_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服务器传 错误原因分析:1.nginx配置缓存区设置过小2.nginx的临时目录(/proxy_temp)过大或没有权限写入缓存文件3.磁盘空间不足 经过验证是第一种原因(nginx配置缓冲区设置过小) 问:nginx的缓冲区作用是什么? 答:如果客户端到nginx速度快,nginx到服务器速度慢,没有缓冲区,一点点数据量就直接发到客户端,十分浪费性能。有了缓冲区...
Nginx 配置中 alias 和 root 区别
root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。 alias是一个目录别名的定义(仅能用于location上下文),root则是最上层目录的定义。 直接通过例子来理解: root123location ^~ /123/abc/ { root /data/www;} 当请求http://blog.whsir.com/123/abc/logo.png时,将会返回服务器上的/data/www/123/abc/logo.png文件,即/data/www/123/abc/ alias123location ^~ /123/abc/ { alias /data/www;} 当请求http://blog.whsir.com/123/abc/logo.png时,将会返回服务器上的/data/www/logo.png文件,即/data/www
