Nginx 最佳实践

The*_*per 46 nginx httpd

您在使用 NGinx 时使用了哪些最佳实践?

Jau*_* Ho 21

如何结合 HTTP 和 HTTPS 块。

server {
    listen 80;
    listen 443 default ssl;

    # other directives
}
Run Code Online (Sandbox Code Playgroud)

这是作为对另一个问题的答案发布的。见这里


Rog*_*ger 21

到目前为止,我见过的最好的技巧来自作者在它的陷阱页面上:https : //www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/


Sla*_*a K 15

通常,使用“if”是一种不好的做法(根据 nginx 的作者)。如果可能,最好使用 error_page 指令的 try_file 代替“if (-f ...)”

将提示与 maintenence.html 文件和提示与 try_files 相结合,我们得到:

地点 / {
    try_files /maintenance.html $uri $uri/ @wordpress;
}

当维护结束时,只需从 $root 中 mv maintenance.html。

  • 这并不理想,因为 /maintenance.html 将作为 200 响应。您可能希望搜索引擎识别维护页面不是您的实际网站。您可能想要返回 503(服务暂时不可用)。我能弄清楚如何做到这一点的唯一方法是使用 `if (-f ...) { return 503; }` 和 `error_page 503 /maintenance.html`。你怎么认为? (16认同)

Jau*_* Ho 11

配置 nginx 以使用更强的 SSL 密码。默认情况下,启用 SSLv2(如果可能,您应该禁用它)。

ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5;
Run Code Online (Sandbox Code Playgroud)

http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl


Phi*_*ham 8

map在切换匹配子域的根时,使用该指令代替正则表达式通常更有效:

server {

    server_name mysite.tld ~^.+\.mysite\.tld$;

    map $host $files {
        default            common;
        mysite.tld         common;
        www.mysite.tld     common;
        admin.mysite.tld   admin;
        system.mysite.tld  system;
        *.mysite.tld       users;
    }

    root /var/www/mysite/$files;

}
Run Code Online (Sandbox Code Playgroud)

  • 你知道你可以做 server_name mysite.tld *.mysite.tld (5认同)

Phi*_*ham 8

empty_gif模块也非常有用,特别是如果您需要监控来自网络服务器的响应(使用 nagios/monit/etc):

location /token {
    empty_gif;
}

location /favicon.ico {
    empty_gif;
}

location /img/1px.gif {
    empty_gif;
} 
Run Code Online (Sandbox Code Playgroud)

  • 也`access_log off;` 对于这些位置是常见的做法 (5认同)

jti*_*man 6

我们使用 Chef 设置 Nginx,使用这本食谱,其中包含处理 nginx 配置的脚本,类似于 Debian 做 Apache2 的方式,以及一些具有合理默认值的示例模板。


The*_*per 5

这是返回维护页面的好方法。所有请求都被重写并返回正确的 http 代码。(503服务不可用)

error_page 503 /maintenance.html;

location /
{
    if (-f $document_root/maintenance.html)
    {
        return 503;
    }

    try_files $uri /index.php?$args;
}

location = /maintenance.html
{
    rewrite ^ /maintenance.html break;
}
Run Code Online (Sandbox Code Playgroud)