當前位置:首頁 » 編程語言 » nginxpython配置文件

nginxpython配置文件

發布時間: 2024-01-31 02:53:50

Ⅰ CentOS+nginx+uwsgi+python 多站點環境搭建

轉自 Xiongpq

http://www.cnblogs.com/xiongpq/p/3381069.html

略有補充(可能出現錯誤及解決辦法)

環境:

CentOS X64 6.4

nginx 1.5.6

Python 2.7.5

正文:

一:安裝需要的類庫及Python2.7.5

安裝必要的開發包

yum groupinstall "Development tools"

yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

CentOS 自帶Python2.6.6,但我們可以再安裝Python2.7.5:

cd ~

wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2

tar xvf Python-2.7.5.tar.bz2

cd Python-2.7.5

./configure --prefix=/usr/local

make && make altinstall

安裝完畢後,可是使用」python2.7」命令進入python2.7的環境。

二:安裝Python包管理

easy_install包 https://pypi.python.org/pypi/distribute

方便安裝Python的開發包

cd ~

wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz

tar xf distribute-0.6.49.tar.gz

cd distribute-0.6.49python2.7 setup.py install

easy_install --version

紅色部分必須是「python2.7」,否則將安裝到默認的2.6環境內。

pip包 https://pypi.python.org/pypi/pip

安裝pip的好處是可以pip list、pip uninstall 管理Python包, easy_install沒有這個功能,只有uninstall

easy_install pip

pip --version

三:安裝uwsgi

uwsgi: https://pypi.python.org/pypi/uWSGI

uwsgi參數詳解: http://uwsgi-docs.readthedocs.org/en/latest/Options.html

pip install uwsgi

uwsgi --version

測試uwsgi是否正常:

新建test.py文件,內容如下:

def application(env, start_response):

start_response('200 OK', [('Content-Type','text/html')])

return "Hello World"

然後在終端運行:

uwsgi --http :8001 --wsgi-file test.py

在瀏覽器內輸入: http://你購買的雲主機公網ip:8001 ,看是否有「Hello World」輸出,若沒有輸出,請檢查你的安裝過程。

四:安裝django

pip install django

測試django是否正常,運行:

django-admin.py startproject demosite

cd demositepython2.7 manage.py runserver 0.0.0.0:8002

在瀏覽器內輸入: http://1 你購買的雲主機公網 :8002,檢查django是否運行正常。

五:安裝nginx

cd ~

wget http://nginx.org/download/nginx-1.5.6.tar.gz

tar xf nginx-1.5.6.tar.gz

cd nginx-1.5.6

./configure --prefix=/usr/local/nginx-1.5.6 \

--with-http_stub_status_mole \

--with-http_gzip_static_mole

make && make install

安裝Nginx時報錯

錯誤提示:

./configure: error: the HTTP rewrite mole requires the PCRE library.

安裝pcre-devel與openssl-devel解決問題

yum -y install pcre-devel openssl openssl-devel

./configure --prefix=/usr/local/nginx

make

make install

六:配置uwsgi

uwsgi支持ini、xml等多種配置方式,但個人感覺ini更方便:

在/ect/目錄下新建uwsgi9090.ini,添加如下配置:

[uwsgi]

socket =

master = true         //主進程

vhost = true          //多站模式

no-stie = true        //多站模式時不設置入口模塊和文件

workers = 2           //子進程數

reload-mercy = 10

vacuum = true         //退出、重啟時清理文件

max-requests = 1000

limit-as = 512

buffer-sizi = 30000

pidfile = /var/run/uwsgi9090.pid    //pid文件,用於下面的腳本啟動、停止該進程

daemonize = /website/uwsgi9090.log

設置uwsgi開機啟動,在/etc/init.d/目錄下新建uwsgi9090文件,內容如下:

uwsgi9090

#! /bin/sh

# chkconfig: 2345 55 25

# Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and

# run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your

# distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'

### BEGIN INIT INFO

# Provides:          uwsgi

# Required-Start:    $all

# Required-Stop:     $all

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: starts the uwsgi web server

# Description:       starts uwsgi using start-stop-daemon

### END INIT INFO

# Author:   licess

# website:  http://lnmp.org

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DESC="uwsgi daemon"

NAME=uwsgi9090

DAEMON=/usr/local/bin/uwsgi

CONFIGFILE=/etc/$NAME.ini

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

set -e

[ -x "$DAEMON" ] || exit 0

do_start() {

$DAEMON $CONFIGFILE || echo -n "uwsgi already running"

}

do_stop() {

$DAEMON --stop $PIDFILE || echo -n "uwsgi not running"

rm -f $PIDFILE

echo "$DAEMON STOPED."

}

do_reload() {

$DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"

}

do_status() {

ps aux|grep $DAEMON

}

case "$1" in

status)

echo -en "Status $NAME: \n"

do_status

;;

start)

echo -en "Starting $NAME: \n"

do_start

;;

stop)

echo -en "Stopping $NAME: \n"

do_stop

;;

reload|graceful)

echo -en "Reloading $NAME: \n"

do_reload

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2

exit 3

;;

esac

exit 0

uwsgi9090

然後在終端執行:

-- 添加服務

chkconfig --add uwsgi9090

-- 設置開機啟動

chkconfig uwsgi9090 on

七:設置nginx

找到nginx的安裝目錄/usr/local/nginx,打開conf/nginx.conf文件,修改server配置

server {

listen       80;

server_name  localhost;

location / {

include  uwsgi_params;

uwsgi_pass  ;              //必須和uwsgi中的設置一致

index  index.html index.htm;

client_max_body_size 35m;

}

}

注意 :安裝django這步中startproject的demosite路徑,需要和nginx.conf中 uwsgi_param UWSGI_CHDIR /demosite;對應上。

設置nginx開機啟動,在/etc/init.d/目錄下新建nginx文件,內容如下:

nginx

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /usr/local/nginx/conf/nginx.conf

# pidfile:     /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/opt/nginx-1.5.6/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/nginx-1.5.6/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch $lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f $lockfile

return $retval

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

nginx

然後在終端執行:

-- 添加服務

chkconfig --add nginx

-- 設置開機啟動

chkconfig nginx on

八:測試

OK,一切配置完畢,在終端運行

service uwsgi9090 start

service nginx start

錯誤1:

[root@VM_23_251_centos nginx-1.5.6]# service uwsgi9090 start

env: /etc/init.d/uwsgi9090: Permission denied

[root@VM_23_251_centos nginx-1.5.6]# service nginx start

env: /etc/init.d/nginx: Permission denied

解決辦法1:把可執行勾選上

錯誤2:

[root@VM_23_251_centos ~]# sudo service nginx start

env: /etc/init.d/nginx: No such file or directory

解決辦法1:

Be careful what text editors you use on your local Windows computer. Some create Windows-style line endings (\r\n, CR-LF), which cause problems like this on Unix-like systems such as linux or Mac OS X.

If you use such an editor, adjust its settings so that it creates files with Unix-style line endings. If the editor has no such setting, you should not be using it at all.

文本格式由windows 改為unix版

錯誤3:

*** WARNING: Can't find section "uwsgi" in INI configuration file /etc/uwsgi9090.ini ***

解決辦法3:

在瀏覽器輸入: http:// 雲主機公網ip,恭喜你可以看到django的「It work」了~

九:多站配置

我採用運行多個uwsgi服務的方法來實現多個站點。

重復第六步,創建uwsgi9091.ini,並相應修改文件中的

socket = 127.0.0.1:9091

pidfile = /var/run/uwsgi9091.pid

daemonize = /website/uwsgi9091.log

並創建服務uwsgi9091,設置開機啟動。

然後修改nginx的配置文件為:

nginx

然後我們就可以通過 http://127.0.0.1:1300 來訪問新的網站了。

十:其他配置

防火牆設置

CentOS默認關閉外部對80、3306等埠的訪問,所以要在其他計算機訪問這台伺服器,就必須修改防火牆配置,打開/etc/sysconfig/iptables

在「-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT」,下添加:

-A INPUT -m state --state NEW -m tcp -p -dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p -dport 3306 -j ACCEPT

然後保存,並關閉該文件,在終端內運行下面的命令,刷新防火牆配置:

service iptables restart

安裝Mysqldb

yum -y install mysql-develeasy_install-2.7 MySQL-python

注意紅色部分,easy_install-2.7,否則它將默認安裝到Python2.6環境內。

------------------------------------------------------------------------------------------------------------------

2014年12月02日添加:

CentOS 7中默認使用Firewalld做防火牆,所以修改iptables後,在重啟系統後,根本不管用。

Firewalld中添加埠方法如下:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

Ⅱ Nginx+Python 怎麼搞才好

python服務後台運行

由於python程序一般只有單進程,因此要用uwsgi啟動多個python進程來同時服務,寫代碼時就要求所有請求必須是無狀態的。

為了保證python程序能一直運行,一般用supervisor來拉起並運行在後台。

supervisor配置這樣寫:

[program:app]

command = uwsgi

--socket 0.0.0.0:6580

--chdir /app

--mole app.wsgi

--processes 8

--master

--uid root

--listen 100

stopsignal=QUIT

autostart=true

autorestart=true

user=root

stdout_logfile_maxbytes=10MB

stdout_logfile_backups=10

stdout_logfile=/app/log/debug.log

redirect_stderr=true

nginx轉發

要將請求轉到python,一般用nginx轉發請求到uwsgi,nginx配置文件中server段這樣寫:

server {

listen 8000;

location / {

uwsgi_pass 127.0.0.1:6580;

include uwsgi_params;

}

}

總結一下:一般的實踐是用uwsgi+supervisor啟動多個python程序的服務進程,再用nginx轉發uwsgi請求到python模塊。

Ⅲ nginx+uwsgi+flask搭建後怎麼訪問.py文件

一、介紹

最近開發要用一個測試環境,是這樣的Nginx+uwsgi+flask 的一個結構。下面是一些記錄,在Centos 系統上使用Flask 架構部署一個簡單的Python應用。然後使用Nginx作為前端反向代理,設置uWSGI應用網關處理web應用程序。

二、條件

1) 環境要求

  • Server OS:最小化安裝 Centos 6.8

  • Nginx :反向代理

  • Python2.6~2.7:開發語言

  • Flask/uWSGI:框架

  • Pip:python包管理工具

  • iptables&selinux:開放用到的埠,關閉selinux。

  • 以上內容代理了uwsgi的埠,客戶端通過訪問nginx的80埠,然後nginx在將請求轉發到後台flask應用的8000埠上。

    啟動nginx

  • [root@hcloud ~]# service nginx start

  • Starting nginx: [ OK ]

  • 在瀏覽器內測試訪問一下nginx:http://192.168.30.58

    每個人都應是守望者,守望我們的心智,我們的理想,以防它在生活中不知不覺地墜落、被操控和被自己遺忘。。。

Ⅳ python gunicorn 配置文件在哪

工作中使用gunicorn作為伺服器的時候,通過配置文件來啟動的,gunicorn啟動參數可以從--help中獲取,但是配置文件中,沒有,下面是一些常見的選項的配置和說明
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
bind = '0.0.0.0:9010' #綁定的ip已經埠號
backlog = 512 #監聽隊列
chdir = '/home/test/server/bin' #gunicorn要切換到的目的工作目錄
timeout = 30 #超時
worker_class = 'gevent' #使用gevent模式,還可以使用sync 模式,默認的是sync模式
workers = 16 #進程數
threads = 2 #指定每個進程開啟的線程數
loglevel = 'info' #日誌級別,這個日誌級別指的是錯誤日誌的級別,而訪問日誌的級別無法設置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"' #設置gunicorn訪問日誌格式,錯誤日誌無法設置
其每個選項的含義如下
"""
h remote address
l '-'
u currently '-', may be user name in future releases
t date of the request
r status line (e.g. ``GET / HTTP/1.1``)
s status
b response length or '-'
f referer
a user agent
T request time in seconds
D request time in microseconds
L request time in decimal seconds
p process ID
{Header}i request header
{Header}o response header

"""
accesslog = "/dev/null" #訪問日誌文件的路徑
errorlog = "/dev/null" #錯誤日誌文件的路徑
公司的server日誌都是按天分割的,多進程中TimeRotatingFileHandler分割日誌還是會出問題的,於是便使用了
WatchedFileHandler來記錄日誌,在server機器上,凌晨加一個自動任務,這樣日誌就能切割了,但是gunicorn
的logging默認使用的是FileHandler,但是一旦當自動任務備份的時候,它不會自動重新創建,於是便把原有的FileHandler流重定向到了/dev/null,自己再另外添加我想要的Handler即可,如下:
"""
acclog = logging.getLogger('gunicorn.access')
acclog.addHandler(WatchedFileHandler('/home/test/server/log/gunicorn_access.log'))
acclog.propagate = False
errlog = logging.getLogger('gunicorn.error')
errlog.addHandler(WatchedFileHandler('/home/test/server/log/gunicorn_error.log'))
errlog.propagate = False

"""
公司gunicorn 與nginx配合使用,nginx只需要設置一個反向代理
proxy_pass http://127.0.0.1:9010 ;即可
"""

熱點內容
wow刷碎片腳本 發布:2024-11-29 15:58:24 瀏覽:589
明小子源碼 發布:2024-11-29 15:15:30 瀏覽:143
蘋果8plus什麼配置 發布:2024-11-29 14:16:36 瀏覽:677
androidmvp結構 發布:2024-11-29 14:16:34 瀏覽:535
androidsqlite命令 發布:2024-11-29 14:04:38 瀏覽:156
信用卡分期演算法 發布:2024-11-29 13:50:56 瀏覽:807
安卓手機dll文件為什麼打不開 發布:2024-11-29 13:40:49 瀏覽:1001
百分之五十石碳酸怎麼配置 發布:2024-11-29 13:38:56 瀏覽:972
我的世界伺服器如何裝資源包 發布:2024-11-29 13:25:48 瀏覽:21
mc伺服器的ip是什麼 發布:2024-11-29 13:23:33 瀏覽:568