请在我的网站域名下找到以下设置,该设置位于 / etc / nginx / sites-enabled 中。 (mysite.lk)
server {
listen 80;
server_name mysite.lk www.mysite.lk;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8080";
}
}
应用程序在端口8080上运行,在这里我将所有80个流量重定向到8080。 我的网站仅使用 mysite.lk 和 www.mysite.lk 域名。
因此,我想限制/阻止所有其他域(除了mysite.lk和www.mysite.lk)来到这个服务器IP。为实现这一目标,我需要做些什么改变?
我尝试过很多东西,例如答案 Why is nginx responding to any domain name?,但在nginx启动时遇到错误。
请帮帮我! 感谢。
找到答案。在给定配置之前,配置顶部应该需要一个包含所有服务器块,如下所示。代码块应该是这样的。
server {
return 403;
}
server {
listen 80;
server_name mysite.lk www.mysite.lk;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8080";
}
}
答案 0 :(得分:2)
Nginx中定义的第一台服务器被视为default_server
,因此只需添加一个作为默认值并返回412(Precondition Failed)或任何其他最符合您要求的状态,将有助于后续服务器服从server_name
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 412;
}
server {
listen 80;
server_name mysite.lk www.mysite.lk;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "http://127.0.0.1:8080";
}
}
答案 1 :(得分:0)
如何在没有server_name的情况下创建服务器指令。像这样的东西
server {
listen 80 default_server;
location / {
deny all;
}
}
EDIT 请阅读http://nginx.org/en/docs/http/request_processing.html 简而言之,当涉及server_names或位置时,nginx始终寻找最佳匹配,如果找不到它,则使用默认服务器。
答案 2 :(得分:0)
以上所有答案均正确。但是,如果另一个域尝试通过端口443(https / SSL)访问您的主机,则它们都不起作用。
要阻止对https请求的访问,只需在主机的https服务器配置中添加if阻止。
server {
server_name www.xyz.com xyz.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
if ($host = "www.specificdomainyouwanttoblock.com") {
return 404;
}
if ($host = "specificdomainyouwanttoblock.com") {
return 404;
}
#or you can simply add:
if ($host != "yourdomain.com") {
return 404;
}
}
答案 3 :(得分:0)
我有一个带防火墙的播放器脚本,该脚本阻止了不在白名单上的网站,但事实证明,如果激活了防火墙,则视频在我的Android应用程序中停止运行,他们知道如何修改防火墙与程序包名称一起使用Android应用程序将我的应用程序添加到白名单中,并且能够在防火墙处于活动状态的情况下在应用程序中播放视频,因为必须禁用它才能在应用程序中播放视频。
/**
* Disable access baseed on referer
*/
if (Data::Get("accs_restriction") == "enable") {
$domains = explode(",", Data::Get("allowed_domains"));
$referer = parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST);
if (empty($referer) || !in_array($referer, $domains)) {
header('HTTP/1.0 403 Forbidden');
require TEMPLATES . "pages/access_denied.php";
exit;
}
}