Nginx反代 - 多站点、X光共存

这里是不使用一键脚本,全手动配置的方法之一。缺点是繁琐,有很多前提条件。优点是比脚本更灵活一些,可以按想要的那样配置。

接上面SSL与泛域名解析

在已经有域名、域名证书、配置好Nginx反代和Cloudflare DNS+CDN的情况下,如果你的VPS下面硬件所在的机房地理位置不错……可以考虑再挂个X光。

Nginx 这边可以这样写

server {
        listen 80;
        listen [::]:80;
        server_name <secondary_domain>.<your_domain>.com;
        # 安全起见,不使用自己打算长期使用的域名
        # 使用Cloudflare的免费证书的请不要设置三级域名,不支持的
        # 虽然想排列组合出更多域名的心情我懂
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name <secondary_domain>.<your_domain>.com;

        include snippets/<your_SSL_snippets>.conf;

        add_header 'Access-Control-Allow-Origin' '*';

        client_max_body_size 20m;


	location /<some_random_path_please>/ { # 请来它一大长串随机码!
        # 写/phpmyadmin/什么的也见过,按这个思路,/api/什么的估计也行
        # 主要是为了让它看起来很低调

        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        set $is_matched 0;

        if ($http_upgrade != "websocket") {# 是的,需要一个回落用的网站
            # 也见过有人写回落去Digital Ocean知识库的……可能有点不太厚道?
            # 但总之,反代到其他域名下要注意Host和Origin别再复制$host了
            proxy_pass http://localhost:<port_of_your_fallback_site>;
            set $is_matched 1;
        }
        
        if ($is_matched = 0 ){ 
            proxy_pass http://localhost:<port_of_your_xray>;
        }
    }

        location / {
        proxy_pass http://127.0.0.1:<port_of_your_fallback_site>;

        proxy_set_header        Host             $host;
        proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_http_version      1.1;
        proxy_set_header        Upgrade          $http_upgrade;
        proxy_set_header        Connection       $http_connection;
        proxy_set_header        Origin           http://$host;
    }

}

X光安装

# bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

配置

{
  "inbounds": [
    {
      "port": 端口号_自行设置,
      "listen": "127.0.0.1",
      "tag": "VLESS-in",
      "protocol": "VLESS",
      "settings": {
        "clients": [
          {
            "id": "弄一串uuid之类的,但其实使用上类似于你的密码",
            "alterId": 64
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/之前在Nginx配置里写得那串随机或不随机的/"
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    },
        {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "dns": {
    "servers": [
      "https+local://1.1.1.1/dns-query",
      "1.1.1.1",
      "1.0.0.1",
      "8.8.8.8",
      "8.8.4.4",
      "localhost"
    ]
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": [
          "VLESS-in"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

然后重启服务。

如果使用的是新的二级域名,记得在DNS里配置,开上CDN理论上能更稳定一些(生命力顽强挂的角度……)。

服务端就完事了,客户端搜索一下从Git下载、配置吧。

另外不要看到某些客户端(如酸酸乳)的连通性测试结果显示失败(fail)就信了,其实可能使能用的,只有真的上网试一试才能确定。

以及,悄悄:红米AC2100棒棒哒,完全带得起来~