小编Has*_*aig的帖子

在 nginx 配置中设置 ssl_prefer_server_ciphers 指令

这个问题是关于ssl_prefer_server_ciphers在配置 nginx 时设置正确的值。

根据 Mozilla 建议的一个相当典型的配置,该值应该是off(来源:https : //ssl-config.mozilla.org/#server=nginx&server-version=1.17.7&config=intermediate&openssl-version=1.0.1g)。

根据 nginx 自己的文档,应该始终将其设置为onhttps : //www.nginx.com/blog/nginx-https-101-ssl-basics-getting-started/(在文档中搜索ssl_prefer_server_ciphers)。

我不知道该遵循哪些建议。这两个来源都非常可靠。

一些行业专家能否就何时应该转off,以及何时转on?也很想知道原理。

ssl nginx

25
推荐指数
2
解决办法
7565
查看次数

X-FORWARDED-FOR 可以包含多个 IP

可以X-FORWARDED-FOR包含多个IP地址吗?如果是这样,为什么?一个说明性的例子会很棒。

http http-headers

20
推荐指数
2
解决办法
2万
查看次数

访问控制列表中 0.0.0.0/0 和 ::/0 之间的区别

设置访问控制列表时,0.0.0.0/0和之间有什么区别::/0

我看到这个是我正在设置的 AWS EC2 实例

ipv6 access-control-list ipv4

17
推荐指数
2
解决办法
2万
查看次数

sysctl.conf 中 net.ipv4.tcp_max_syn_backlog 的合理值

我在调sysctl.conf

根据linode 网站上的优化指南,以下是要设置的合理值sysctl.conf

net.ipv4.tcp_max_syn_backlog = 3240000
Run Code Online (Sandbox Code Playgroud)

但是,archlinux 优化指南中的相同值是:

net.ipv4.tcp_max_syn_backlog = 65536
Run Code Online (Sandbox Code Playgroud)

最后,在另一个优化博客上(虽然很旧,但在谷歌上的 SEO 仍然很高),其价值被吹捧为:

net.ipv4.tcp_max_syn_backlog = 4096
Run Code Online (Sandbox Code Playgroud)

所有这些球场都大不相同。将此值设置为高数(与低数相比)背后的原因是什么?哪一个应该是真正的“理智”价值开始?

linux ubuntu sysctl

13
推荐指数
1
解决办法
2万
查看次数

了解 nginx 'listen' 指令的不同值

我正在编写 nginx 配置,我有一个基本问题。

之间有什么区别:

listen 443 ssl;对比listen [::]:443 ssl;对比listen [::]:443 ssl http2;

我的目标是保护这个 Web 应用程序的安全,同时保持对旧客户端的兼容。

注意:我知道这[::]:443与 ipv6 有关,但在这种情况下它是否也包含 ipv4?想澄清我的概念。

nginx

13
推荐指数
1
解决办法
1万
查看次数

将 HSTS 添加到 nginx 配置

我最近更改了我的 nginx 配置,将所有 http 流量重定向到 https(并将所有 www 流量重定向到 no-www)。

也添加add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;到我的服务器块是否有意义?或者这是不需要的,因为我已经重定向了所有流量?知道优点(和缺点,如果有的话)会很棒。


如果相关,我当前的虚拟主机配置是:

server {
    server_name example.com www.example.com;

    listen 80;

    return 301 https://example.com$request_uri;
}

server {
    server_name www.example.com;

    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/cert_chain.crt;
    ... other SSL related config ...

    return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;
    ... other SSL related config ...

    ... remaining server configuration ...
}
Run Code Online (Sandbox Code Playgroud)

nginx https hsts

8
推荐指数
3
解决办法
2万
查看次数

使用 limit_except 拒绝除 GET、HEAD 和 POST 之外的所有内容

在典型的网站 nginx 配置(例如博客)中,如何使用 nginxlimit_except拒绝除典型的 http 方法(即GETPOST)之外的所有方法?想象一下,它驻留在server块中,并且块被配置为将所有流量重定向到httpswww

如何实现这一点的说明性示例会很棒。

我知道有些有争议的方法是:

add_header Allow "GET, POST, HEAD" always;
if ( $request_method !~ ^(GET|POST|HEAD)$ ) {
return 405;
}
Run Code Online (Sandbox Code Playgroud)

然而,鉴于if is evil,探索替代方法是有意义的。

nginx

7
推荐指数
1
解决办法
3万
查看次数

以正确的方式将密码套件添加到 nginx 配置

我需要添加ssl_ciphers我的 nginx 配置。根据https://wiki.mozilla.org/Security/Server_Side_TLS,以下是推荐的密码套件(具有中间兼容性):

Cipher suites (TLS 1.3): TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

Cipher suites (TLS 1.2): ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
Run Code Online (Sandbox Code Playgroud)

我的问题很简单:如何在 nginx 配置中添加 TLS 1.3 和 TLS 1.2 套件?

像这样?

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_prefer_server_ciphers on;

ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256';

ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
Run Code Online (Sandbox Code Playgroud)

ssl nginx

5
推荐指数
2
解决办法
4万
查看次数

nginx虚拟主机中使用reuseport的正确方法

我使用 nginx 作为带有 Gunicorn 应用程序服务器(Django 应用程序)的反向代理。

在我的 nginx 虚拟主机文件中,有两个server块。前者将www流量重定向到后者(后者处理non-www,https流量)。

具体来说,前一个位置块是:

server {

    server_name www.example.com;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    return 301 https://example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

后一个位置块是:

server {

    server_name example.com;
    listen 443 ssl http2 reuseport;
    listen [::]:443 ssl http2 reuseport;

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

reuseport请注意后一个块中的使用。

如果我放入reuseport两个块,则会收到错误:nginx: [emerg] duplicate listen options for 0.0.0.0:443 in /etc/nginx/sites-enabled/vhost:62

如果我将它单独插入前一个块中,它就可以工作。我对正确放置它的位置感到困惑,前一个块还是后一个块。有人可以澄清一下吗?


据我了解,该reuseport参数指示 nginx 为每个工作进程创建一个单独的侦听套接字,允许内核在工作进程之间分配传入连接(以处理客户端和服务器之间发送的多个数据包)。

但这并不能帮助我理解为什么我不能reuseport在上述两个块中使用它,或者我应该在哪一个块中使用它(假设我只能在一个块中使用它)。

nginx

5
推荐指数
1
解决办法
1万
查看次数

优化 nginx client_body_buffer_size 以便 Web 应用程序接受文件上传

配置 nginx 时,哪些注意事项会影响client_body_buffer_size

我已将其设置10m为用户上传照片和图像模因的网站(有点像9gag)。请注意,也client_max_body_size设置为。10m总的来说,我的推理是网络服务器应该接受图像大小为 10MB 的 POST 请求(网站策略) - 因此这两个指令都应该是10m.

这个推理正确吗?

有人可以阐明影响设置什么值的因素client_body_buffer_size以及client_body_buffer_size(对于我描述的那种网络应用程序)的典型值吗?

如果重要的话,我使用 nginx 作为反向代理。

optimization nginx

4
推荐指数
1
解决办法
3万
查看次数

防止 nginx 访问日志被静态请求填满

对我的文件夹中的 favicon.ico 和资产的无用 GET 请求/static/正在我的 nginx 访问日志中乱七八糟。而且它是一个繁忙的服务器 - 这意味着 I/O 也被浪费了。更不用说我的fail2ban安装有时会做出扭曲的决定!

如何排除这些令人讨厌的日志行?我在 nginx 上1.4.x

我找到了一种在apache中做到这一点的方法,但在 nginx 中却找不到。


这是我的 nginx 虚拟主机文件:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=6m;

upstream my_server {

  server unix:/home/myuser/myfolder/myapp/myapp.sock  fail_timeout=0;
}

server {
    server_name example.com www.example.com;

    listen 80;

    return 301 https://example.com$request_uri;
}

server {
    server_name www.example.com;

    listen 443 ssl;
    listen [::]:443 ssl;

    . . . SSL related stuff . . .   

    . . . adding security related headers . . .

    return 301 …
Run Code Online (Sandbox Code Playgroud)

nginx logging

4
推荐指数
1
解决办法
9671
查看次数

nginx反向代理中从www重定向到无www

我正在开发一个带有 nginx 反向代理和 Gunicorn 应用服务器的 Django 应用程序。作为一名新手 Web 开发人员,我需要将www流量重定向到no wwwWeb 服务器级别的帮助。我目前正在应用程序内的中间件级别执行相同的操作,但需要提高性能。

目前我的nginx虚拟主机文件布局如下:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=6m;

upstream my_server {
    server unix:/home/myuser/myproject/myfolder/myproject.sock  fail_timeout=0;
}

server {
    listen 80;
    server_name example.com www.example.com;

    # a bunch of 'location' blocks e.g. 'location /' or 'location @http_proxy_to_app', etc. 

}

server {

    listen 443 ssl;
    server_name example.com www.example.com;

    # SSL related stuff

    # a bunch of 'location' blocks e.g. 'location /' or 'location @http_proxy_to_app', etc.

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我如何将www 重定向到 no-www …

nginx django redirect 301-redirect

2
推荐指数
1
解决办法
2450
查看次数

用于设置 nginx 反向代理的解析器指令

当使用 gunicorn 应用服务器(后端应用服务器和 nginx 之间典型的一对一映射)将 nginx 设置为反向代理时,我配置了以下内容:

upstream my_server {

  server unix:/home/user/folder/app/app.sock  fail_timeout=0;
}

location @https_proxy_to_app {
    proxy_set_header X-Forwarded-Proto https;
    include proxy_params;
    proxy_redirect off;
    proxy_pass http://my_server;
}
Run Code Online (Sandbox Code Playgroud)

许多关于该主题的文献都规定了这一点。虽然这有效,但我有几个问题。

首先(也是微不足道的),为什么需要包含http://proxy_pass http://my_server;

其次(更重要的是),我是否需要resolver为这种设置设置指令?我没有使用 AWS 的 Elastic Load Balancer,而且很多围绕该指令的处方 恰好都围绕着 AWS ELB。有人可以用外行的话解释为什么以及如何设置它吗?意外的服务器管理员在这里,所以需要专家的意见。resolver

请注意,我也在使用 OSCP 装订。

nginx

1
推荐指数
1
解决办法
8369
查看次数