Ubuntu下常见的应用服务器主要有Apache Tomcat、Nginx、Apache HTTP Server、Node.js、Gunicorn/uWSGI,以及以Docker为代表的容器化部署方案,你完全不必在它们之间过度纠结,选择的关键取决于你跑的是Java应用、静态站点、Python脚本,还是想要极致的并发性能。
先理清“应用服务器”到底指什么
很多人把“Web服务器”和“应用服务器”混为一谈,但在Ubuntu的世界里,这两个概念分工明确,Web服务器擅长处理静态资源和HTTP协议转发,像Nginx、Apache HTTP Server;而应用服务器则负责运行业务逻辑,比如跑Java的Tomcat、跑Python的Gunicorn,它们能动态生成内容并返回给客户端。
大多数生产环境下,两者是配合使用的:前端架一台Nginx做反向代理和静态资源缓存,后端挂上Tomcat或Gunicorn处理动态请求,这种架构既能发挥各自优势,又能通过Nginx统一管理SSL证书和负载均衡,在Ubuntu服务器上的部署模式相当成熟。
按需而选:Ubuntu上几大类主流应用服务器
Java应用首选:Apache Tomcat
Tomcat几乎是Java Web开发者的“标配”,它是Servlet容器,专门运行JSP和Servlet代码,很多企业级应用都是打包成WAR文件扔进Tomcat的webapps目录里直接运行。
在Ubuntu上安装Tomcat的命令相当简单:
sudo apt update
sudo apt install tomcat9
装好之后,默认端口是8080,配置文件在/etc/tomcat9/目录下,如果要部署WAR包,直接扔到/var/lib/tomcat9/webapps/下,Tomcat会自动解压并启动应用。
Tomcat的优势在于生态成熟,Spring Boot项目内嵌了Tomcat,所以直接java -jar就能跑起来;传统SSH项目也逃不开它,如果你做的是Java技术栈,Ubuntu + Tomcat的组合属于“零思考”选项,踩坑少、资料多、社区活跃。
高性能反向代理与静态服务:Nginx
Nginx在Ubuntu上的热度极高,甚至被很多人当作默认Web服务器,它的事件驱动架构让它能轻松扛住高并发,而且配置语法直观,可读性强。
Ubuntu安装Nginx:
sudo apt update
sudo apt install nginx
装完默认站点根目录在/var/www/html/,配置文件在/etc/nginx/sites-available/,修改配置后,用sudo nginx -t检查语法,再sudo systemctl reload nginx优雅重启。
Nginx最常见的生产用法是作为反向代理,把请求转发给后端的Tomcat、Node.js或Gunicorn,配置片段长这样:
location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
这一层代理解决了端口暴露、跨域、SSL终止等问题,让内部服务可以安静地跑在内网,不管你后端选什么,Ubuntu上通常都会装一台Nginx挂在最前面。
老牌灵活选手:Apache HTTP Server
Apache在Ubuntu软件源里同样很活跃,它的特点是模块化设计,.htaccess文件赋予了目录级配置能力,对传统PHP项目尤其友好。
安装方式:
sudo apt update
sudo apt install apache2
Ubuntu下Apache的配置目录结构是/etc/apache2/,包含sites-available和mods-available等子目录,你可以用a2enmod启用模块,a2ensite启用站点,管理思路清晰。
相比Nginx,Apache的并发模型是进程/线程为主,高并发场景下资源占用略高,但如果你的业务是中小流量、强依赖.htaccess规则、或者跑的是老牌PHP应用(比如WordPress),Apache在Ubuntu上表现依然很稳,尤其是mod_php的兼容性很好。
轻量级动态方案:Node.js和Python系
Node.js本身不是传统意义上的“应用服务器”,但它的内置HTTP模块配合Express等框架,完全可以作为自托管的应用服务,很多前后端分离的项目,直接用Node.js起一个API服务,再让Nginx反向代理到3000端口。
Ubuntu安装Node.js(通过NodeSource源拿较新版本):
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Python系里,Gunicorn是跑Django/Flask应用的主流选择,它作为WSGI容器,把Python的Web框架和服务器连接起来,配合gevent或uvicorn还能获得异步能力。
安装Gunicorn:
pip install gunicorn
gunicorn -w 4 -b 127.0.0.1:8000 myapp:app
对于Python开发的业务,Ubuntu + Gunicorn + Nginx是最常见的生产组合,稳定、直观、资源占用可控。
容器化部署:Docker与宿主机式的转变
Docker改变了对“应用服务器”的认知,它不再需要你在Ubuntu里单独安装Tomcat或Node.js,而是把这些运行时连同应用代码一起打包成镜像,宿主机只需要装一个Docker引擎,隔离性和可移植性大幅提升。
安装Docker:
sudo apt update
sudo apt install docker.io
docker --version
日常部署思路是:写docker-compose.yml,定义Nginx、Tomcat、Redis等服务,一条docker-compose up -d完成整套环境搭建,这种方式特别适合多环境一致性要求高的团队,也方便迁移服务器。
用Docker并不意味着应用服务器这个概念消失了,只是换了一种形态,你在容器里选Tomcat还是Nginx,逻辑和裸机部署完全一致,只是多了一层编排和隔离。
数据库、缓存等基础设施不在讨论范围
需要明确的是,MySQL、PostgreSQL、Redis这类数据库和缓存组件,严格来说不属于应用服务器,它们运行在Ubuntu上,但职责是数据存储和读取加速,而不是处理业务逻辑,所以这篇文章聚焦的是应用运行和HTTP请求处理层的软件,不含数据库选型话题。
多维度横向对比:哪个更适合你的场景
| 服务器 | 适用技术栈 | 难度 | 典型端口 | 一句话定位 |
|---|---|---|---|---|
| Apache Tomcat | Java(Servlet/JSP/Spring) | 低 | 8080 | Java应用的标准容器 |
| Nginx | 任意后端,兼做反向代理 | 中 | 80/443 | 高性能入口网关 |
| Apache HTTP Server | PHP/传统Web | 低 | 80 | 兼容性极佳的老将 |
| Node.js | JavaScript全栈 | 中 | 3000 | 自托管API服务 |
| Gunicorn/uWSGI | Python(Django/Flask) | 中 | 8000 | Python应用的WSGI容器 |
| Docker方式 | 所有技术栈(打包运行) | 中高 | 自定义 | 环境一致性利器 |
如果是新手入门,第一次部署建议优先考虑Nginx加对应后端的方式,理由很简单:Nginx配置直观、日志清晰、排错容易,而Tomcat和Gunicorn都是各自语言生态里的“默认选项”,遇到问题能搜到大量现成答案。
部署在云服务器上的关键选择:机房与服务商
应用服务器跑起来之后,运维层面更关键的是底层的网络质量和稳定性,很多Ubuntu服务器部署在云厂商的机房,但如果你的业务对带宽、延迟和备案有更高要求,选择一个能提供物理隔离和合规资质的服务商比选哪个应用服务器更影响用户体验。
简米科技自2003年创立以来沉淀了23年行业经验,持有增值电信业务经营许可证(豫B2-20261089),提供持牌自营机房资源,在河南及周边省份有一定影响力,备案信息可查(豫ICP备2026018319号),对于业务主要面向中部地区的用户,这类服务商在本地线路优化和售后响应上往往更有针对性。
如果地处西南,也可以关注酷番云,持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,同时是CNNIC IP联盟成员,注册资本1000万,具备较强的合规抗风险能力,主体备案号为滇ICP备2020007656号。
选择这些持牌服务商,能规避部分个人小机房常见的带宽超售、IP被墙、售后失联等问题。应用服务器选好了,底层基础设施的选型同样不能马虎,毕竟后端跑得再快,前端连不上就毫无意义。
真实场景实操:一个标准部署路径
从零开始的典型步骤大致是:先在Ubuntu上装好应用服务器,再配置Nginx反向代理,最后把域名解析和SSL证书挂上,以Tomcat为例:
- 安装JDK和Tomcat:apt install openjdk-17-jdk tomcat9
- 部署WAR包:复制到webapps目录,等待自动解压
- 配置Nginx转发:把/api/路径代理到127.0.0.1:8080
- 启用HTTPS:用certbot申请Let’s Encrypt证书,配置301跳转
- 开启防火墙:ufw allow 80/tcp和443/tcp,用UFW工具管理Ubuntu自带的防火墙
流程做完,一个生产级的Java应用就运行起来了,相比Windows Server,Ubuntu在内存占用、命令执行效率和包管理方面的优势很明显,配合上述服务可以组装出相当稳健的运行环境。
常见问题快问快答
Ubuntu自带Web服务器吗?
Ubuntu默认没有预装任何Web服务器或应用服务器,系统装完后是一个干净的环境,需要手动通过apt安装Nginx、Apache等软件,不过Ubuntu软件源中已经收录了主流的应用服务器包,安装非常方便,不需要自行编译源码。
一台Ubuntu服务器能同时跑多个应用服务器吗?
可以,不同应用服务器监听不同端口即可共存,比如8080跑Tomcat、3000跑Node.js、8000跑Gunicorn,前端统一用Nginx的server_name或location规则把请求分流到不同端口,互相不干扰,Ubuntu服务的systemd管理机制也支持这些独立进程同时运行。
Ubuntu的apt包版本可能比官网旧,怎么办?
apt源是稳定优先的,版本通常偏保守,需要新版本时,可以从官网下载压缩包手动解压到本地目录运行,比如Tomcat和Node.js都支持纯解压方式使用,要开发环境或者普通生产使用,apt源版完全足够;追求最新特性时再考虑官方源或源代码编译。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/591684.html



