Nginx限制域

vh0rcniy  于 2023-11-17  发布在  Nginx
关注(0)|答案(5)|浏览(176)

请在我的网站域名下的**/etc/nginx/sites-enabled**中找到下面的设置。(mysite.lk)

  1. server {
  2. listen 80;
  3. server_name mysite.lk www.mysite.lk;
  4. location / {
  5. proxy_set_header X-Forwarded-For $remote_addr;
  6. proxy_set_header Host $http_host;
  7. proxy_pass "http://127.0.0.1:8080";
  8. }
  9. }

字符串
应用程序运行在端口8080上,这里我将所有80流量重定向到8080。我的网站只使用mysite.lkwww.mysite.lk域名。
因此,我想限制/阻止所有其他域(除了mysite.lk和www.mysite.lk),这是来此服务器的IP。我需要做什么改变,以实现这一点?
我尝试了很多东西,比如在Why is nginx responding to any domain name?中给出的答案,但是在nginx启动时出现了错误。
帮帮忙!谢谢。

更新

找到了答案。在配置的顶部,在给定的配置之前,应该需要一个catch-all服务器块,如下所示。代码块应该是这样的。

  1. server {
  2. return 403;
  3. }
  4. server {
  5. listen 80;
  6. server_name mysite.lk www.mysite.lk;
  7. location / {
  8. proxy_set_header X-Forwarded-For $remote_addr;
  9. proxy_set_header Host $http_host;
  10. proxy_pass "http://127.0.0.1:8080";
  11. }
  12. }

cyej8jka

cyej8jka1#

Nginx中定义的第一个服务器被视为default_server,因此只需添加一个作为默认值并返回412(先决条件失败)或任何其他最适合您要求的状态,将有助于后续服务器遵守server_name

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server;
  4. server_name _;
  5. return 412;
  6. }
  7. server {
  8. listen 80;
  9. server_name mysite.lk www.mysite.lk;
  10. location / {
  11. proxy_set_header X-Forwarded-For $remote_addr;
  12. proxy_set_header Host $http_host;
  13. proxy_pass "http://127.0.0.1:8080";
  14. }
  15. }

字符串

展开查看全部
li9yvcax

li9yvcax2#

以上所有的答案都是正确的。但是如果另一个域试图通过端口443(https/SSL)访问您的主机,它们都不起作用。
要阻止对https请求的访问,只需在主机的https服务器配置中添加一个if块。

  1. server {
  2. server_name www.xyz.com xyz.com;
  3. location / {
  4. # First attempt to serve request as file, then
  5. # as directory, then fall back to displaying a 404.
  6. try_files $uri $uri/ =404;
  7. }
  8. listen [::]:443 ssl ipv6only=on; # managed by Certbot
  9. listen 443 ssl; # managed by Certbot
  10. if ($host = "www.specificdomainyouwanttoblock.com") {
  11. return 404;
  12. }
  13. if ($host = "specificdomainyouwanttoblock.com") {
  14. return 404;
  15. }
  16. # or you can simply add:
  17. if ($host != "yourdomain.com") {
  18. return 404;
  19. }
  20. }

字符串

展开查看全部
iecba09b

iecba09b3#

创建一个没有server_name的server指令怎么样

  1. server {
  2. listen 80 default_server;
  3. location / {
  4. deny all;
  5. }
  6. }

字符串
编辑请阅读http://nginx.org/en/docs/http/request_processing.html简而言之,nginx总是在服务器名称或位置方面寻找最佳匹配,如果找不到,则使用默认服务器。

wlzqhblo

wlzqhblo4#

我有一个带有防火墙的播放器脚本,它阻止了不在我白名单上的网站,但事实证明,如果我激活了防火墙,视频就会停止在我的Android应用程序中工作,他们知道我如何修改我的防火墙以使用软件包名称Android应用程序将我的应用程序添加到白色列表中,并能够在防火墙处于活动状态的情况下播放应用程序中的视频,因为我必须将其禁用,可以播放我应用程序中的视频。

  1. /**
  2. * Disable access baseed on referer
  3. */
  4. if (Data::Get("accs_restriction") == "enable") {
  5. $domains = explode(",", Data::Get("allowed_domains"));
  6. $referer = parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST);
  7. if (empty($referer) || !in_array($referer, $domains)) {
  8. header('HTTP/1.0 403 Forbidden');
  9. require TEMPLATES . "pages/access_denied.php";
  10. exit;
  11. }
  12. }

字符串

展开查看全部
nhaq1z21

nhaq1z215#

我在站点的虚拟主机文件中实现了以下行:

  1. if ($http_referer ~* (example\.com)) {
  2. return 403;
  3. }

字符串
对我很有效。

相关问题