结合 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处理!