结合 Laravel / ThinkPHP / Django 的部署实践
本文深入介绍如何使用 Nginx 作为 Web 服务器,结合 PHP 框架(Laravel、ThinkPHP)和 Python 框架(Django)实现高效部署。涵盖环境配置、反向代理、静态资源优化以及常见问题排查。
一、为什么要用 Nginx 部署 Web 框架?
- 高性能反向代理:Nginx 可轻松处理数万并发请求,适合作为 PHP-FPM 和 Gunicorn 的前置代理。 
- 灵活静态资源处理:将 CSS、JS、图片等静态资源直接由 Nginx 服务,提高访问速度。 
- 安全和负载均衡:支持 HTTPS、IP 限制、Basic Auth 和负载均衡。 
二、部署 Laravel 项目
1. 目录结构
假设项目路径为:
/var/www/laravel-app/public
其中 public 目录是 Web 入口。
2. PHP-FPM 配置
sudo apt install php-fpm php-mysql -y sudo systemctl enable php7.4-fpm sudo systemctl start php7.4-fpm
3. Nginx 配置(Laravel)
server {
    listen 80;
    server_name laravel.example.com;
    root /var/www/laravel-app/public;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.ht {
        deny all;
    }
}三、部署 ThinkPHP 项目
1. 目录结构
ThinkPHP 一般入口为:
/var/www/thinkphp-app/public
2. Nginx 配置(ThinkPHP)
server {
    listen 80;
    server_name thinkphp.example.com;
    root /var/www/thinkphp-app/public;
    index index.php index.html;
    location / {
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /index.php?s=$1 last;
            break;
        }
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}四、部署 Django 项目
1. 使用 Gunicorn 运行 Django
pip install gunicorn cd /var/www/django-app gunicorn --bind 127.0.0.1:8001 projectname.wsgi
使用 systemd 配置为服务:
sudo nano /etc/systemd/system/gunicorn.service
[Unit] Description=gunicorn daemon After=network.target [Service] User=www-data Group=www-data WorkingDirectory=/var/www/django-app ExecStart=/usr/bin/gunicorn --workers 3 --bind 127.0.0.1:8001 projectname.wsgi:application [Install] WantedBy=multi-user.target sudo systemctl start gunicorn sudo systemctl enable gunicorn
2. Nginx 配置(Django)
server {
    listen 80;
    server_name django.example.com;
    location /static/ {
        alias /var/www/django-app/static/;
    }
    location / {
        proxy_pass http://127.0.0.1:8001;
        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;
    }
}五、优化与安全加固
- 开启 HTTPS 
 使用 Let’s Encrypt 自动签发 SSL 证书:- sudo certbot --nginx -d laravel.example.com -d django.example.com 
- 静态资源缓存 
 为 CSS/JS/图片设置缓存头:- location ~* \.(?:ico|css|js|gif|jpe?g|png|woff2?|eot|ttf|svg)$ { expires 30d; access_log off; add_header Cache-Control "public"; }
- PHP-FPM 进程优化 
 编辑- /etc/php/7.4/fpm/pool.d/www.conf调整- pm.max_children等参数。
- Django Gunicorn 优化 
 根据服务器 CPU 数量设置- --workers。
六、常见问题
1. Laravel 出现 502 Bad Gateway?
检查 PHP-FPM 是否运行,查看 /var/log/nginx/error.log。
2. Django 静态文件 404?
确保运行 python manage.py collectstatic 并配置 location /static/。
3. ThinkPHP URL 路由不生效?
确认 rewrite ^/(.*)$ /index.php?s=$1 last; 已生效。
七、总结
通过 Nginx + Laravel/ThinkPHP/Django 的组合,我们能实现灵活、安全、高效的 Web 服务架构。
- Laravel 和 ThinkPHP 用 PHP-FPM 处理请求。 
- Django 使用 Gunicorn + Nginx 反向代理。 
- 静态资源直接由 Nginx 提供,能极大减轻应用服务器压力。 
1、部分文章来源于网络,仅作为参考。 2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!






