凌峰创科服务平台

Linux如何搭建Web服务器?

在Linux环境下搭建Web服务器是运维和开发人员必备的技能,本文将详细介绍基于Nginx和Apache两种主流服务器的搭建过程、配置优化及常见问题处理,帮助读者快速掌握在Linux系统中部署Web服务的方法。

环境准备与基础配置

在开始搭建Web服务器前,需确保Linux系统已正确安装并更新,推荐使用Ubuntu 22.04或CentOS 7及以上版本,首先通过终端更新系统软件包:

  • Ubuntu/Debian系列sudo apt update && sudo apt upgrade -y
  • CentOS/RHEL系列sudo yum update -y

接着安装必要的编译工具和依赖库,例如build-essential(Ubuntu)或gcc make(CentOS),以便后续编译安装或运行扩展组件,建议配置防火墙规则,开放HTTP(80端口)和HTTPS(443端口)服务:

# Ubuntu (ufw)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Nginx服务器搭建

Nginx以其高性能、低资源消耗和反向代理能力成为主流Web服务器选择。

安装Nginx

  • Ubuntu/Debian
    sudo apt install nginx -y
  • CentOS
    sudo yum install epel-release -y  # 安装EPEL源
    sudo yum install nginx -y

安装完成后,启动Nginx服务并设置开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx

配置虚拟主机

Nginx的虚拟主机配置文件位于/etc/nginx/sites-available/,可通过创建新文件(如example.com)定义站点:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html index.htm;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

创建网站目录并设置权限:

sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com  # Ubuntu
# CentOS: sudo chown -R apache:apache /var/www/example.com
sudo echo "<h1>Hello Nginx!</h1>" | sudo tee /var/www/example.com/index.html

启用虚拟主机并测试配置:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t  # 检查配置语法
sudo systemctl reload nginx

性能优化

编辑/etc/nginx/nginx.conf调整核心参数:

worker_processes auto;  # 根据CPU核心数设置
worker_rlimit_nofile 65535;  # 最大文件描述符
events {
    worker_connections 1024;  # 单进程最大连接数
}
http {
    keepalive_timeout 65;  # 保持连接超时时间
    gzip on;  # 启用压缩
    gzip_types text/plain text/css application/json;
}

Apache服务器搭建

Apache作为历史悠久的Web服务器,以模块化和稳定性著称。

安装Apache

  • Ubuntu/Debian
    sudo apt install apache2 -y
  • CentOS
    sudo yum install httpd -y

启动服务并设置自启:

sudo systemctl start apache2  # Ubuntu: apache2; CentOS: httpd
sudo systemctl enable apache2

配置虚拟主机

Apache虚拟主机配置文件位于/etc/apache2/sites-available/(Ubuntu)或/etc/httpd/conf.d/(CentOS),创建example.com.conf

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

创建网站目录并设置权限:

sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo echo "<h1>Hello Apache!</h1>" | sudo tee /var/www/example.com/index.html

启用站点和模块(Ubuntu需启用rewrite模块):

sudo a2ensite example.com.conf
sudo a2enmod rewrite
sudo systemctl reload apache2

安全配置

编辑/etc/apache2/apache2.conf(Ubuntu)或/etc/httpd/conf/httpd.conf(CentOS),关闭目录列表和版本信息:

Options -Indexes  # 禁止目录列表
ServerTokens Prod  # 隐藏Apache版本

常见问题与解决方案

无法访问Web页面

  • 原因:防火墙未开放端口、服务未启动或域名解析错误。
  • 解决
    1. 检查服务状态:sudo systemctl status nginx
    2. 验证端口监听:sudo netstat -tuln | grep 80
    3. 确认防火墙规则:sudo ufw status(Ubuntu)或sudo firewall-cmd --list-all(CentOS)。

502 Bad Gateway错误(Nginx)

  • 原因:后端服务(如PHP-FPM)未启动或配置错误。
  • 解决
    1. 检查PHP-FPM状态:sudo systemctl status php8.1-fpm
    2. 确认fastcgi_pass路径是否正确(如/run/php/php8.1-fpm.sock);
    3. 查看Nginx错误日志:tail -f /var/log/nginx/error.log

相关问答FAQs

Q1: 如何在Linux中为Web服务器配置SSL证书?
A1: 可使用Let's Encrypt免费证书,以Nginx为例,安装Certbot:sudo apt install certbot python3-certbot-nginx,然后执行sudo certbot --nginx -d example.com -d www.example.com,按提示完成证书申请和自动配置,证书续期可通过定时任务实现:sudo crontab -e,添加0 12 * * * /usr/bin/certbot renew --quiet

Q2: 如何优化Web服务器的并发处理能力?
A2: 可从以下方面优化:

  • 调整worker进程数:Nginx设置为auto(根据CPU核心数),Apache的mpm_prefork_moduleStartServersMaxRequestWorkers根据内存调整;
  • 启用缓存:Nginx配置proxy_cache,Apache配置mod_cache
  • 负载均衡:通过Nginx的upstream模块将请求分发到多个后端服务器;
  • 使用CDN:将静态资源托管至CDN减少服务器压力。
分享:
扫描分享到社交APP
上一篇
下一篇