如何在cPanel附加域部署Next.js应用(端口3000,不影响其他域名)
解决方案:附加域无端口访问Next.js且不影响主域
针对你的场景(cPanel环境下主域占用80端口,附加域需反向代理到3000端口的Next.js应用),以下是两种可行方案:
方案一:Apache反向代理(cPanel默认环境)
cPanel默认使用Apache,通过.htaccess配置反向代理是最便捷的方式:
确认附加域配置
在cPanel中完成new-website.com的附加域添加,文档根目录可任意设置(反向代理会跳过该目录直接指向3000端口)。创建反向代理规则
进入cPanel的「文件管理器」,打开附加域的根目录,新建/编辑.htaccess文件,添加以下规则:RewriteEngine On # 仅匹配new-website.com域名 RewriteCond %{HTTP_HOST} ^(www\.)?new-website\.com$ [NC] # 将所有请求反向代理到本地3000端口的Next.js应用 RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [P,L]启用Apache代理模块(若未开启)
通过SSH登录服务器,执行以下命令启用必要模块并重启Apache:sudo a2enmod proxy proxy_http sudo systemctl restart httpd后台运行Next.js应用
使用PM2确保应用持续运行(避免SSH断开后停止):npm install pm2 -g # 启动Next.js应用并命名为next-app pm2 start npm --name "next-app" -- start # 设置开机自启 pm2 startup # 保存当前进程配置 pm2 save
方案二:Nginx反向代理(cPanel兼容模式)
若你切换到Nginx,需确保配置仅针对附加域,避免与主域冲突:
启用cPanel的Nginx反向代理
在cPanel的「服务配置」→「Apache和NGINX设置」中,勾选「使用NGINX作为Apache的反向代理」并保存。添加附加域的Nginx自定义配置
通过SSH进入Nginx的用户自定义配置目录(路径示例,根据cPanel用户调整):mkdir -p /etc/nginx/conf.d/userdata/80/new-website.com/ vi /etc/nginx/conf.d/userdata/80/new-website.com/proxy.conf写入以下配置:
server { listen 80; server_name new-website.com www.new-website.com; location / { proxy_pass http://127.0.0.1:3000; # 传递域名信息给Next.js,避免路由识别错误 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }重启Nginx生效
sudo systemctl restart nginx
问题排查说明
- 之前Nginx代理失败:大概率是未指定
server_name或未设置proxy_set_header Host $host,导致Next.js无法正确识别请求域名。 - 改80端口冲突:80端口只能被一个服务占用,主域的Web服务已占用,因此Next.js不能直接绑定80。
next export异常:若你的Next.js应用使用了SSR、API路由、Server Components等动态功能,静态导出会丢失这些特性,只能通过反向代理运行。
内容的提问来源于stack exchange,提问作者AmirRazoR
相关产品推荐
相关产品推荐

