http 自定义的Header字段应遵守一些惯例和最佳实践

2024-9-25 杜世伟 Nginx

在HTTP请求中,自定义的Header字段没有严格的格式要求,但有一些惯例和最佳实践需要遵循,以确保兼容性和可读性:

  1. 字段名称的格式
    • 字段名称应是大小写不敏感的:HTTP标准规定Header字段名称是不区分大小写的,因此X-Custom-Headerx-custom-header是等效的。
    • 使用中划线(Hyphen)作为分隔符:字段名称的单词之间通常使用中划线(-)分隔,例如X-Custom-Header
    • 避免使用下划线(Underscore):虽然技术上可以使用下划线(_),但它在某些情况下可能会引起兼容性问题,尤其是在某些代理服务器或旧版服务器上。推荐使用中划线。
  2. 字段值的格式
    • 字段值通常是字符串,可以包含任何字符,但最好遵循通常的编码格式。例如,二进制数据或特殊字符应当进行Base64编码或URL编码。
    • 避免使用未转义的控制字符(如换行符或回车符),它们会中断Header的格式。
  3. 推荐的命名规则
    • 过去自定义Header通常以X-开头,例如X-Custom-Header。不过,IETF(互联网工程任务组)后来不再建议这种命名规则,建议直接使用具备自解释性的名称。例如,使用Custom-Header代替X-Custom-Header
  4. 长度限制
    • 虽然HTTP协议没有对Header字段的长度设置明确的限制,但不同的服务器、代理和浏览器可能会对Header的大小设置上限,通常是8KB到16KB之间。对于自定义Header字段,最好确保其内容不会过长。
  5. 避免与标准Header冲突
    • 不要使用已经定义好的标准Header字段名,例如Content-TypeAuthorizationAccept等,以避免意外覆盖或冲突。
  6. 多个值的处理
    • 如果自定义Header中需要传递多个值,通常可以用逗号分隔,如:Custom-Header: value1, value2, value3


总结来说,自定义HTTP Header字段在格式上并没有太严格的要求,但遵循一些命名惯例、字符使用规则以及长度限制,有助于提高兼容性和避免潜在的问题。






标签: http nginx

评论(0) 浏览(9013)

nginx 如何在配置文件给静态文件添加缓存

2024-5-23 杜世伟

在 Nginx 中为静态文件添加缓存可以通过设置响应头来实现。这可以通过在 Nginx 配置文件中使用 expires 指令来完成。以下是一个示例配置,展示了如何为特定类型的静态文件(如图像、CSS、JavaScript 文件等)设置缓存头。

假设你的 Nginx 配置文件路径是 /etc/nginx/nginx.conf,你可以在其中添加或修改 server 块来包含缓存配置:

http {
    # 其他全局配置

    server {
        listen 80;
        server_name example.com;

        root /var/www/html;

        location / {
            try_files $uri $uri/ =404;
        }

        # 为图像文件设置缓存
        location ~* \.(jpg|jpeg|png|gif|ico|bmp|webp)$ {
            expires 30d;
            add_header Cache-Control "public, no-transform";
        }

        # 为CSS和JavaScript文件设置缓存
        location ~* \.(css|js)$ {
            expires 7d;
            add_header Cache-Control "public, no-transform";
        }

        # 为字体文件设置缓存
        location ~* \.(woff|woff2|ttf|otf|eot)$ {
            expires 30d;
            add_header Cache-Control "public, no-transform";
        }

        # 为SVG文件设置缓存
        location ~* \.(svg|svgz)$ {
            expires 30d;
            add_header Cache-Control "public, no-transform";
        }

        # 其他静态文件
        location ~* \.(html|htm)$ {
            expires 1h;
            add_header Cache-Control "public, no-transform";
        }

        # 其他配置...
    }
}

在上述配置中:

expires 指令用于设置过期时间,30d 表示30天,7d 表示7天,1h 表示1小时。
add_header Cache-Control 指令用于设置 Cache-Control 响应头,public, no-transform 表示允许所有缓存,且在缓存时不进行转换。

sudo nginx -s reload

这样,Nginx 将为匹配的静态文件添加缓存头,帮助浏览器和中间缓存服务器更好地缓存这些文件,从而提高性能。

标签: nginx expires

评论(0) 浏览(4547)

那些实用的Nginx规则

2017-12-8 杜世伟 Nginx

1. 概述



大家都知道Nginx有很多功能模块,比如反向代理、缓存等,这篇文章总结下我们这些年实际环境中那些有用的Nginx规则和模块,大部分是用法的概括及介绍,具体细节在实际配置时再自行google。



2. 内置语法



先介绍Nginx默认已支持的内置功能,靠这些基本就满足大部分的web服务需求。


2.1 proxy代理


proxy常用于两类应用场景,一类是中转,如异地科学的上网方式,另外一类是到后端服务的负载均衡方案。

用反向代理时候,需要特别注意里面的域名默认是在nginx启动时候就解析了,除非reload否则一直用的是当初解析的域名,也就是说不能动态解析。

但这个问题是可以通过别的模块或者用内置字典变量方式来解决。

阅读全文>>

标签: linux nginx

评论(0) 浏览(15474)

500 internal server error

2017-12-1 杜世伟 Nginx

今天同事在使用开发服管理平台上传图片的时候服务器返回:500 internal server error/nginx
让我帮忙看下什么原因造成的
浏览器返回错误信息的时候抛出nginx,于是我登录服务器查看nginx的错误日志信息,发下如下信息
2017/12/01 10:47:49 [crit] 12775#0: *18 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied)
可以看到提示/var/lib/nginx/权限不足
可以通过以下命令查看权限信息
ls -la /var/lib/nginx
drwx------  3 nginx   nginx   4096 Sep 18 17:20 nginx

阅读全文>>

标签: linux error nginx server crit

评论(0) 浏览(12284)

什么是反向代理服务器

2014-11-15 杜世伟 Nginx

什么是反向代理服务器

        含义:

        ‘反向代理服务器’ 有两个概念,一是‘代理服务器’,二是‘反向’

        ‘代理服务器’比较好理解,例如需要访问某网站,不想或不能直接访问,例如网络的原因、隐私的原因等,我们就连接一个代理服务器,这样对于这个网站来说,访问他的用户是这个代理服务器,而不是我们自己

        ‘反向’的意思我们没有通过代理服务器访问网站,但网站却在自己服务器前面加了一个代理,我们输入网址发起请求后,请求先到了这个代理服务器,代理服务器再把请求转给网站服务器

阅读全文>>

标签: nginx 负载均衡 反向代理服务器

评论(0) 浏览(6288)

Nginx之HAProxy实现负载均衡

2014-10-3 杜世伟 Nginx

一、什么是Haproxy

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

阅读全文>>

标签: nginx 负载均衡 rewrite haproxy

评论(0) 浏览(7566)

Nginx之upstream负载均衡

2014-9-2 杜世伟 Nginx

upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。在上面的设定中,通过upstream指令指定了一个负载均衡器的名称test.net。这个名称可以任意指定,在后面需要用到的地方直接调用即可。

阅读全文>>

标签: nginx upstream 负载均衡

评论(0) 浏览(7141)

Nginx Location配置总结

2014-8-10 杜世伟 Nginx

语法规则: location [=|~|~*|^~] /uri/ { … }

= 开头表示精确匹配

^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

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

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

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

阅读全文>>

标签: nginx location rewrite

评论(0) 浏览(19177)

Nginx服务器架构简析

2014-7-3 杜世伟 Nginx

模块化结构的思想是一个很久的概念,但也正是成熟的思想造就了Nginx的巨大优越性。

我们知道Nginx从总体上来讲是有许多个模块构成的。习惯将Nginx分为5大模块分别为:核心模块,标准HTTP模块,可选HTTP模块,邮件服务模块和第三方模块。

阅读全文>>

标签: nginx upstream 负载均衡

评论(0) 浏览(14786)

高性能网站架构之负载均衡 Nginx的简介

2014-6-3 杜世伟 Nginx

什么是Nginx

         Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

阅读全文>>

标签: nginx 负载均衡 反向代理服务器

评论(0) 浏览(11026)

Powered by emlog 沪ICP备2023034538号-1