python+nginx+uwsgi部署云主机遇到的问题

问题后期会有次序的整理,目前整理一小部分

1.部署之后出现403问题。

403权限问题的修改:

(1)打开nginx.conf文件

vim /etc/nginx/nginx.conf

(2)按键盘“i”进入编辑模式,修改第一行为

user root;

(3)按键盘“esc”退出键,输入:wq,保存并推出。

(4)查看80端口占用pid值

lsof -i tcp:80

(5)杀死pid=14012的进程

kill 14012

(6)启动nginx

sudo /usr/sbin/nginx

查看页面是否显示正常

2.uwsgi的理解及简单使用?

uwsgi中文文档:http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html

(1)简单运用-利用文件启动

新建uwsgitest.py的文件(python3+写法)

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

放置在服务器某个目录下

在该目录运行

uwsgi --http :9090 --wsgi-file uwsgitest.py

可以看到打出的文字,uwsgi起作用,但是关闭终端后,无法显示。

需要新建uswgi.ini文件,并设定开机启动

uwsgi.ini

[uwsgi]
socket = 127.0.0.1:9090
chdir = /root/projects/
wsgi-file = py_rest/uwsgitest.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

更新ini文件 

uwsgi -i /root/projects/py_rest/uwsgi.ini &

(2)django的uwsgi设置

其中,conf目录下2文件和uwsgi_params为必须文件(py_rest/uwsgi.ini和py_uwsgitest.py为上文必须文件)

conf目录下放置本项目nginx和uwsgi配置文件

uc_nginx.conf

upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:80; # for a web port socket (we'll use this first)
}

server {
listen      80; #   监听端口
server_name xx.xxx.xx.xx; #    填写你的服务器
charset     utf-8;
autoindex on;

#   资源限制
client_max_body_size 75M;   #   adjust to taste
client_header_buffer_size 16k;

# Django media资源
location /media  {
    alias  /root/projects/py_rest/media; # 指向django的media目录
}

# Django static资源
location /static {
    alias /root/projects/py_rest/static; # 指向django的static目录
}

# 日志
access_log /root/projects/py_rest/access_log;
error_log  /root/projects/py_rest/error_log;

location / {
# A.静态页面
#    root   /root/projects/py_rest/templates;
#    index  index index.html urls.py;

# B.django项目
    uwsgi_pass 127.0.0.1:8000; #这个和uwsgi中的socket要一致
    include uwsgi_params;

# C.其他设置
#    autoindex on;
#    autoindex_exact_size on;
    autoindex_localtime on;
}
}

uwsgi.ini

# py_rest.ini file
[uwsgi]
#   Django的项目全路径
chdir           = /root/projects/py_rest
#   Django's wsgi文件
#module          = py_rest.wsgi
wsgi-file            = py_rest/wsgi.py

master          = true
processes       = 10
#   socket连接
socket          = 127.0.0.1:8000 #  这个和uc_nginx.conf中的uwsgi_pass要一致
vacuum          = true  #   退出uwsgi是否清理中间文件,包含pid、sock和status文件
procname-prefix-spaced= py_rest  #   uwsgi的进程名称前缀
py-autoreload=1 #   py文件修改,自动加载

#   虚拟环境路径
home = /root/.virtualenvs/testvir3
virtualenv = /root/.virtualenvs/testvir3
#   日志
logto = /tmp/mylog.log

文件上传到服务器上

uswgi_prama(重要,ini文件设置location / {include uwsgi_params;}时需要该文件的路径,如本例所示就要在chdir设置的目录下,也就是   /root/projects/py_rest目录下。如过放到别的路径下,include后面需要给路径

uwsgi_param QUERY_STRING        $query_string;
uwsgi_param REQUEST_METHOD      $request_method;
uwsgi_param CONTENT_TYPE        $content_type;
uwsgi_param CONTENT_LENGTH      $content_length;

uwsgi_param REQUEST_URI     $request_uri;
uwsgi_param PATH_INFO       $document_uri;
uwsgi_param DOCUMENT_ROOT       $document_root;
uwsgi_param SERVER_PROTOCOL     $server_protocol;
uwsgi_param UWSGI_SCHEME        $scheme;

uwsgi_param REMOTE_ADDR     $remote_addr;
uwsgi_param REMOTE_PORT     $remote_port;
uwsgi_param SERVER_PORT     $server_port;
uwsgi_param SERVER_NAME     $server_name;

1) conf更新

cd /etc/nginx/conf.d/

rm uc_nginx.conf

sudo ln -s /root/projects/py_rest/conf/nginx/uc_nginx.conf /etc/nginx/conf.d/

lsof -i tcp:80

kill 12344

sudo /usr/sbin/nginx

2) ini更新

uwsgi -i /root/projects/py_rest/conf/uwsgi.ini &

查看页面已经可以刷出

由于设置的是80端口,在浏览器里输入主机ip就可以看到主页内容

不过对静态资源的加载出现问题,需要设置。

3.ImportError: No module named 'MySQLdb'

解决1:

路径:/root/.virtualenvs/env_rest/lib/python3.5/site-packages/django/db/backends/mysql/base.py

vim /usr/lib/python3.5/site-packages/django/db/backends/mysql/base.py

在from django.utils.safestring import SafeBytest,SafeTest下添加下面两条

import pymysql
pymysql.install_as_MySQLdb()

结果:运行会报错

解决2:

wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
tar zxf MySQL-python-1.2.3.tar.gz && cd MySQL-python-1.2.3
python2 setup.py build
python2 setup.py install

centos提示ImportError: No module named MySQLdb解决办法:https://lvtao.net/server/645.html

结果

参考文档

1.nginx出现403 Forbidden解决方法:https://www.cnblogs.com/Alex-as/p/8963505.html

2.nginx 403 forbidden 二种原因:https://blog.csdn.net/u011650048/article/details/54092881

3.项目部署(nginx + uwsgi + django) 和 开机自启动django项目:https://blog.csdn.net/qq_31835117/article/details/81108857

4.uwsgi使用介绍:https://www.jianshu.com/p/c3b13b5ad3d7

5.python3.*报“ImportError: No module named ‘MySQLdb'”:https://www.cnblogs.com/TaleG/p/6735099.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

SQLServer 延迟事务持久性

SQL Server 2014新功能 -- 延迟事务持久性(Delayed Transaction Durability) SQL Server事务提交默认...

2398
来自专栏磨磨谈

基于Docker UI 配置ceph集群

前一篇介绍了docker在命令行下面进行的ceph部署,本篇用docker的UI进行ceph的部署,目前来说市面上还没有一款能够比较简单就能直接在OS上面去部署...

902
来自专栏有刻

Spring Boot 多模块与 Maven 私有仓库

4137
来自专栏乐沙弥的世界

Xtrabackup 流备份与恢复

        Xtrabackup是MySQL数据库的备份不可多得的工具之一。提供了全备,增备,数据库级别,表级别备份等等。最牛X的还有不落盘的备份,即流备份...

3622
来自专栏编程

Linux后门整理合集

UnixBash 远控后门 简介 利用 Unix/Linux 自带的 Bash 和 Crond 实现远控功能,保持反弹上线到公网机器。 利用方法 先创建 /et...

5778
来自专栏雪胖纸的玩蛇日常

python3+django2 开发易语言网络验证(下)

2633
来自专栏小怪聊职场

爬虫架构|Celery+RabbitMQ快速入门(二)

3246
来自专栏coding

2018年swoole实战1-初识swoole安装swooleide自动提示tcp 服务udp 服务http 服务websocket 服务

使用pecl安装swoole,安装过程中,会提示你是否需要安装某些扩展,可自主选择yes或no,如果是选择安装redis扩展,本机需要安装redis环境

822
来自专栏非著名程序员

Android Studio之gradle的配置与介绍

Android Studio之gradle的配置与介绍 非著名程序员 1、gradle的简单介绍 Gradle是可以用于Android开发的新一代的Build ...

2529
来自专栏FreeBuf

渗透测试TIPS之删除、伪造Linux系统登录日志

0x00. 引言 擦除日志在渗透测试中是非常重要的一个阶段,这样可以更好地隐藏入侵痕迹,做到不被系统管理人员察觉,实现长期潜伏的目的。 前段时间NSA泄露的渗透...

4916

扫码关注云+社区

领取腾讯云代金券