在nginx中处理default_server和public ip的最佳实践

我最近在debian 8上创build了一个nginx服务器。它在/ etc / nginx / sites-available / default中提供了一个默认configuration,它被redirect到一个nginx的欢迎页面。

server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name your_server_ip; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; } location ~ /\.ht { deny all; } } 

我已经添加了一个新的生产页面,用'ssl'来说'example.com'。

在../example.com的configuration中,它没有被设置为默认服务器。

 server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://$server_name$request_uri; } server { # SSL configuration listen 443 ssl; listen [::]:443 ssl; include snippets/ssl-example.com.conf; include snippets/ssl-params.conf; .... 

现在,当我通过https://www.ssllabs.com/ssltest/analyze.html?d=example.com进行安全testing时,得到了A +。 但它曾经评论过“不一致的服务器configuration”。

而当我加载的IP地址,说浏览器的xxxx为https:// xxxx它加载相同的页面https://example.com但没有SSL(绿色地址栏)上。 如果我加载http:// xxxx它加载默认的nginx欢迎页面。

我试图设置默认configuration(对于ip)来获取禁止消息,我已经添加了下面的代码

 location / { deny all; } 

现在,当我在安全testingexample.com时,它说“没有安全的协议支持”,并没有出现testing结果。

所以我的问题是,

nginx自带的ip地址默认configuration应该怎么做?

哪个server_name(config文件)应该被设置为default_server'listen'命令?

当前正在转发https请求到示例域的ip应该做什么?

预期的结果: –

https:// example.com只能用来连接服务器,加载的ip地址可以显示'page not found'或者'禁止',因为example.com将被用于php脚本。

在设置configuration之后,SSLtesting应该给予至less一个额定值。

IP地址不应该直接接受任何连接并进行处理。

您可以将其作为您的默认服务器块:

 server { listen 80 default_server; listen 443 ssl default_server; server_name _; ... SSL keys for default server ... return 403; } 

这将导致任何HTTP连接,其中主机:头不匹配服务器上的任何其他虚拟主机将4​​03 Forbidden错误消息返回给客户端。

如果您在这里使用有效的SSL密钥作为与任何现有主机名不匹配的主机名,则客户端将直接获得403错误页面。 如果您在此使用自签名证书,则用户将收到不可信证书错误消息。

最后find一个可用的解 Quora做这样的事情。 将默认值redirect到404

来源: 正确设置一个“默认”nginx服务器的https

通过设置默认configuration。

 server { server_name _; listen 80 default_server; return 404; } server { listen 443 ssl; server_name _; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; return 404; } 

然后为ssl创build目录,如果它不存在

 sudo mkdir -p /etc/nginx/ssl 

然后为此创build一个自签名的ssl

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt 

检查错误,并重新加载nginx获取404

 nginx -t sudo sytemctl reload nginx