使用端口 8080 实现子域名

使用端口 8080 实现子域名

我有一个 VPS,在该 VPS 上有一个使用 Docker 端口 80 运行的现有应用程序。我想要在该 VPS 上部署两个应用程序,第一个应用程序是使用端口 8080 的 Laravel 后端,第二个应用程序是 NextJS 前端端口 8081。这两个应用程序都可以通过公共 IP(193.203.x.x:8080193.203.x.x:8081)访问。

但我想对第一个应用程序和第二个应用程序使用子域。

  • laravel 后端:be.example.com
  • nextjs 前端:fe.example.com

我已经配置了 A 记录并将值befe点添加到服务器193.203.x.x

我已经配置了 nginx,以便第一个应用程序指向be.example.com,第二个应用程序指向fe.example.com,但是当我在浏览器中输入 时be.example.com,出现的是端口为 80 的现有应用程序。

我希望当我输入时be.example.com,出现 Laravel 后端应用程序页面,同样当我检查时fe.example.com,出现 NextJS 前端应用程序页面。

我做了什么:

我检查了域配置,没有带 * 的 A 记录。我还检查了后端和前端应用程序的 Nginx,例如,它已关闭,而 be.example.com 页面仍然显示带有端口 80 的现有应用程序,这意味着我的 Nginx 无法访问 be.example.com URL

这是我的 nginx 配置:

可用站点

server {
        listen 8080;
        listen [::]:8080;

        server_name be.example.com; #change with your domain
        root /home/cabin/web-app-backend/public;

        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-Content-Type-Options "nosniff";

        index index.php;

        charset utf-8;

        location / {
                #try_files $uri $uri/ /index.php?query_string;

                proxy_pass http://127.0.0.1:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                proxy_redirect off;

                client_max_body_size 10m;
                client_body_buffer_size 128k;
                proxy_connect_timeout 90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;

                proxy_buffer_size 4k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;

        }

        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
        error_page 404 /index.php;

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
                include fastcgi_params;
        }}

ufw 状态

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
443                        ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
85                         DENY        Anywhere
8080                       ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere
8081                       ALLOW       Anywhere
8081/tcp                   ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
85 (v6)                    DENY        Anywhere (v6)
8080 (v6)                  ALLOW       Anywhere (v6)
8080/tcp (v6)              ALLOW       Anywhere (v6)
8081 (v6)                  ALLOW       Anywhere (v6)
8081/tcp (v6)              ALLOW       Anywhere (v6)

答案1

如果您希望用户输入be.example.com并获取您的应用程序,则需要使用默认端口,HTTP 为 80,HTTPS 为 443。对于其他每个端口,用户也需要输入端口,例如be.example.com:8080

话虽如此,您需要将服务器块绑定到默认端口。

例子:

server {
        listen 80;
        listen [::]:80;

        server_name be.example.com; 
        location / {
                proxy_pass http://127.0.0.1:8080;
        }

}

server {
        listen 80;
        listen [::]:80;

        server_name fe.example.com; 
        location / {
                proxy_pass http://127.0.0.1:8081;
        }

}

不过,你应该考虑默认使用 HTTPS,将所有 HTTP 流量重定向到 HTTPS,因为 SSL 证书现在不需要花费任何费用。

之后,您应该将后端服务器绑定到环回接口,127.0.0.1以便它们只能通过反向代理访问。您可以并且应该从防火墙中删除端口 8081 和 8080。反向代理不需要它们。

答案2

您是否已从 docker 容器中解除绑定现有应用程序端口 80。运行以下命令解除绑定端口 80。

docker run -p <所需主机端口>:<容器端口> -d --name <容器名称> <镜像名称>

相关内容