当使用 nginx 反向代理和 web 服务器时,哪个 (http) 设置应该放在哪里?

当使用 nginx 反向代理和 web 服务器时,哪个 (http) 设置应该放在哪里?

原始网络服务器使用以下块进行设置http

http {

    access_log off;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
    client_body_timeout 10s;
    client_header_buffer_size 4k;
    client_header_timeout 10s;
    client_max_body_size 8m;
    default_type application/octet-stream;
    gzip on;
    gzip_comp_level 3;
    gzip_disable "msie6";
    gzip_min_length 256;
    gzip_proxied any;
    gzip_types application/font-woff application/font-woff2 application/javascript application/json application/rss+$
    gzip_vary on;
    include /etc/nginx/mime.types;
    include /etc/nginx/sites-enabled/*;
    keepalive_timeout 60s;
    open_file_cache max=10240 inactive=60s;
    open_file_cache_errors on;
    open_file_cache_min_uses 2;
    open_file_cache_valid 60s;
    reset_timedout_connection on;
    send_timeout 10s;
    sendfile on;
    server_tokens off;
    tcp_nodelay on;
    tcp_nopush on;

}

后来,添加了反向代理,并使用http与 Web 服务器相同的块进行设置。虽然运行正常,但我不确定httpWeb 服务器上的哪些设置现在是多余的,反之亦然。

例如,gzip 似乎对两者来说都没有必要......

那么这些呢(在反向代理或网络服务器上需要?):

add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";

或者这些:

open_file_cache max=10240 inactive=60s;
open_file_cache_errors on;
open_file_cache_min_uses 2;
open_file_cache_valid 60s;
sendfile on;

我不确定如何正确地将它们配置在一起,并且找不到有关此特定问题的任何文档。

有什么见解吗?:-)

更新:

反向代理:

server {

    listen 80;
    server_name example.com;

    location / {

        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_pass http://192.168.0.2:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;

    }

}

网络服务器:

server {

    index index.php;
    listen 80;
    root /var/www/sites/example.com/;
    server_name example.com;

    location / {

        try_files $uri $uri/ /index.php?$query_string;

    }

    location ~ \.php$ {

        include /etc/nginx/snippets/fastcgi-php.conf;

    }

}

答案1

我假设你写的内容与你实际写的完全一致。如果这意味着我的回答显得傲慢或迂腐,我深表歉意。

反向代理的理念是,它应该像普通的 Web 服务器一样工作,但当它收到来自外部世界的请求时,它会提供从其他 Web 服务器提取的页面。您在此处提供的两种配置中,有点不清楚是包含内容的 Web 服务器,还是反向代理?

如果您提供了完整的 nginx 配置,那么无论哪种情况,第一个问题都是您实际上没有提供任何服务。您缺少基本server语句,不会向任何人返回任何内容。我很惊讶地发现它甚至启动了。

你想要的是类似这样的内容(最低限度地说 - 位置声明不是严格必要的,但更具说明性):

server {
  listen 80;
  root /path/to/your/files;
  location / {
    try_files $uri $uri/ index.html =404;
  }
}

在反向代理服务器端,作为...的一部分阻止server必须包含location以下声明代理密码元素(如链接中所述)。这控制哪些对反向代理的请求将被转发到另一端监听的正常网络服务器。

对于不同设置的交互,几乎没有指导,因为您只需知道发生了什么,并自行决定它是否是多余的——在许多情况下,这完全取决于您的设计选择。但是,作为内容 Web 服务器上的标头的 SAMEORIGIN 将休息您的设置,除非你明确将请求者的 IP 地址从反向代理传递到内容 Web 服务器.gzip on;在某些情况下可能是多余的,但如果您的反向代理预先缓存了某些页面,则可能并非如此。

恐怕没有简单的指南。你只需要对要做的事情有一个更清晰的计划,然后进行相应的设计。只需记住,http反向代理上的阻止将控制与外界之间的流量,而http内容网络服务器上的阻止将控制与外界之间的流量你的反向代理

相关内容