在上一篇Nginx5 - Ubuntu下Django项目部署静态数据部署完成后,发现动态业务无法访问。原因是Nginx服务器无法找到tb商场服务器。
这篇我们使用Nginx的反向代理,部署tb商场服务器。
一、部署tb商城服务器
- 准备生产环境配置文件
- 复制开发环境配置文件dev.py到生产环境配置文件prod.py,并做修改。
# SECURITY WARNING: don't run with debug turned on in production!
# DEBUG = True
DEBUG = False
ALLOWED_HOSTS = ['www.tb.com']
- 准备生产环境启动文件
- 生产环境我们是使用tb.wsgi.py启动服务的。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tb.settings.prod")
- 安装uwsgi包
- Django的程序通常使用uwsgi服务器来运行。
$ pip install uwsgi
- 准备uwsgi服务器配置文件
- 新建meiduo_mall.uwsgi.ini配置文件
[uwsgi]
# 使用Nginx连接时使用,Django程序所在服务器地址
socket=172.16.21.25:8001
# 直接做web服务器使用,Django程序所在服务器地址
# http=172.16.21.25:8001
# 项目目录
chdir=项目路径/tb_project/tb
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=tb/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=虚拟环境路径/.virtualenvs/tb
- 管理uwsgi服务器
# 启动
$ uwsgi --ini uwsgi.ini
# 关闭
$ uwsgi --stop uwsgi.pid
部署Nginx服务器反向代理
- 修改Nginx服务器配置文件
http {
......
# 商城服务器
upstream tb {
server 172.16.21.25:8001; # 服务器1
# server 172.16.21.25:8002; # 服务器2
}
server {
listen 80;
server_name www.tb.com;
......
location / {
include uwsgi_params;
uwsgi_pass tb;
}
}
}
- 启动Nginx服务器
# 检查配置文件
$ sudo /usr/local/nginx/sbin/nginx -t
# 重启
sudo /usr/local/nginx/sbin/nginx -s reload
- 测试Nginx反向代理
部署后的代码调整
- 邮箱的验证链接
# 邮箱验证链接(开发环境)
# EMAIL_VERIFY_URL = 'http://www.tb.com:8000/emails/verification/'
# 邮箱验证链接(生产环境)
EMAIL_VERIFY_URL = 'http://www.tb.com/emails/verification/'
- 支付宝的回调地址
# 支付宝
ALIPAY_APPID = '****************'
ALIPAY_DEBUG = True
ALIPAY_URL = 'https://openapi.alipaydev.com/gateway.do'
# ALIPAY_RETURN_URL = 'http://www.tb.com:8000/payment/status/' # (开发环境)
ALIPAY_RETURN_URL = 'http://www.tb.com/payment/status/' # (生产环境)
- 详情页的访问方式
{# 开发环境 #}
{# <a href="{{ url('goods:detail', args=(sku.id, )) }}"><img src="{{ sku.default_image.url }}"></a> #}
{# <h4><a href="{{ url('goods:detail', args=(sku.id, )) }}">{{ sku.name }}</a></h4> #}
{# 生产环境环境 #}
<a href="/detail/{{ sku.id }}.html"><img src="{{ sku.default_image.url }}"></a>
<h4><a href="/detail/{{ sku.id }}.html">{{ sku.name }}</a></h4>