请在我的站点域名下找到以下设置,该设置位于/ 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";
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序在端口8080上运行,在这里我将所有80个流量重定向到8080.我的网站只使用mysite.lk和www.mysite.lk域名.
因此,我想限制/阻止来到此服务器IP的所有其他域(除了mysite.lk和www.mysite.lk).为实现这一目标,我需要做些什么改变?
我尝试过很多东西,例如 为什么nginx会响应任何域名?,但在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";
}
}
Run Code Online (Sandbox Code Playgroud)
nba*_*ari 10
Nginx 中定义的第一个服务器被视为default_server如此,只需添加一个作为默认值并返回 412(前提条件失败)或任何其他最符合您要求的状态,将有助于后续服务器遵守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";
}
}
Run Code Online (Sandbox Code Playgroud)
以上所有答案都是正确的。但是,如果其他域尝试通过端口 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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5686 次 |
| 最近记录: |