nginx是个web服务器,常用作静态文件服务器,反向代理服务器,邮件代理服务器,负载均衡服务器
1.安装淘宝nginx,编代码编译安装,先解决模块依赖 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2.获取淘宝nginx的源代码 wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
3.解压缩源代码包 tar -zxvf tengine-2.3.2.tar.gz
4.进入源代码目录开始编译三部曲 1.指定安装路径 ./configure --prefix=/opt/s21/tngx
2.编译且安装
make && make install
3.安装完成之后,进入nginx的目录,
[root@wupeiqi tngx]#pwd
/opt/s21/tngx
[root@wupeiqi tngx]#ls
conf html logs sbin
conf 存放配置文件 , 指定了这个软件各种功能的一个文件而已
html 存放前端页面
logs nginx的运行日志
sbin nginx的可执行命令目录
4.进入sbin目录,启动nginx
./nginx
./nginx -s stop 停止nginx
./nginx -t 检查nginx.conf的语法是否正确
./nginx -s reload 不重启nginx,重新加载nginx配置
5.浏览器访问
172.16.168.129
1.找到nginx.conf,学习语法
work_process:1 cpu核数 多线程类似 nginx -t:检测conf语法 nginx -s reload :重新加载
ps -ef|grep negix Kill -9 pid Pkill -9 nginx
这里的所有配置是nginx的核心功能
http {
.... }
2.nginx的访问日志功能
http {
include mime.types;
default_type application/octet-stream;
#日志格式化
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
gzip:on 传输的时候将数据进行压缩,节省带宽
....
}
在nginx上配置多个站点
listen
Server_name 域名
location:资源地址
先配置mac本机域名
vi /etc/hosts
编辑:ip 你想写的域名www.gaogao.com
保存 :wq
重启网络
sudo ifconfig en0 down
sudo ifconfig en0 up
http {
#nginx支持多虚拟主机,只需要写入多个server关键字即可
#虚拟主机1
server {
#基于端口的虚拟主机区分
listen 80;
#基于域名的虚拟主机区分 编辑/etc/hosts 配置ip和域名
server_name www.21.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
#这里是nginx的url匹配,如同django的url规则一样
#当我的请求时 http://192.168.182.130:81/chouhuo.jpg 这样的时候,就进入如下location匹配
#这个是最低级的匹配,所有请求都会走到这里
location / {
#root关键字定义虚拟主机的根目录, 这里是可以修改的
root /opt/gao/;
#必须保证首页文件存在
index index.html index.htm;
}
}
#虚拟主机2
server {
listen 80;
server_name www.22.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
#这里是nginx的url匹配,如同django的url规则一样
#当我的请求时 http://192.168.182.130/gao.jpg 这样的时候,就进入如下location匹配
#这个是最低级的匹配,所有请求都会走到这里
location / {
#root关键字定义虚拟主机的根目录, 这里是可以修改的
root /opt/gao/;
#index参数是定义首页文件的名字的
index index.html index.htm;
}
}
}
4.nginx的错误页面配置 404优化
error_page 404 /404.html
通过这个参数定义即可,
server {
listen 80;
server_name www.666.com;
error_page 404 /404.html; #路径是以location中 root目录下的相对路径
location / {
root /opt/gao; #该路径下有index.html 404.html
index index.html;
}
}
5.nginx反向代理
nginx服务器和资源服务器处于一个网段内
为了安全 请求不能直接访问到资源服务器
请求先发给nginx服务器 nginx有公网ip和私有ip
浏览器-》nginx—>django
代理:
用户,客户端 中介,代理服务器, 房东,资源服务器
租房的客户 -> 中介,代理 -> 房东
浏览器 -> nginx -> django
环境如下
机器1 192.168.182.130 ,是代理服务器的角色,nginx提供的功能
机器2 192.168.182.131 是资源服务器的角色, nginx静态资源服务器
确保两台服务器都有nginx服务
当访问机器1是的时候 返回的是机器2上面的内容
(机器1 将请求发给机器2 机器2返回给机器1 机器返回给用户)
反向代理服务器配置如下
1.打开192.168.182.130 机器的nginx.conf,修改为如下
找到server{}虚拟主机,修改location如下
server {
listen 80;
server_name www.chouhuo.com;
charset koi8-r;
access_log logs/host.access.log main;
access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
location / {
# root /opt/alex/;
# index index.html index.htm;
#实现反向代理的功能参数
#实现反向代理的功能参数
#实现反向代理的功能参数
proxy_pass http://192.168.182.131;
}
}
资源服务器配置
需要的命令
启动nginx: sbin/nginx
如果端口冲突:ps -ef | grep nginx
杀死进程 关于nginx的:pkill -9 nginx
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
浏览器测试
访问代理服务器的时候 获取到的是资源服务器的内容信息
192.168.182.130 —》192.168.182.131(资源服务器)
环境准备
1台负载均衡服务器,nginx而已 192.168.182.130 是负载均衡服务器
2台资源服务器
192.168.182.131 资源服务器1 ,返回gao的页面
192.168.182.132 资源服务器2 ,返回chenjun的页面
1.准备好2台资源服务器,本应该提供一样的数据,进行负载均衡,实验目的,看到不同的页面,所以准备不同的页面数据 192.168.182.131 资源服务器1 ,返回gao的页面 192.168.182.132 资源服务器2 ,返回chenjun的页面
2.准备负载均衡服务器,配置如下 在nginx配置文件中,添加如下配置,定义负载均衡池,写入后端项目地址
默认轮询方式
upstream mydjango {
server 192.168.182.131;
server 192.168.182.132;
}
#权重方式
upstream mydjango {
server 192.168.182.131 weight=4;
server 192.168.182.132 weight=1;
}
#ip哈希方式,根据用户的来源ip计算出哈希值,永远只指派给一个服务器去解析
#ip哈希不得与权重共同使用
#ip哈希不得与权重共同使用
upstream mydjango {
server 192.168.182.131 ;
server 192.168.182.132 ;
ip_hash;
}
#虚拟主机配置如下
server {
listen 80;
server_name www.chouhuo.com;
location / {
# root /opt/alex/;
# index index.html index.htm;
#请求转发给负载均衡池
proxy_pass http://mydjango;
}
}
nginx + uwsgi + django + mysql
后端部署
1.上传crm项目到linux服务器
Scp ...
2.激活一个虚拟环境去使用
virtualenv --no-site-packages --python=python3 crm_env
source bin/activate
2.安装uwsgi命令,
这是python的一个模块
pip3 install -i https://pypi.douban.com/simple uwsgi
模块安装:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.1 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-multiselectfield
或者使用reqirements.txt
Pip3 freeze > requirements.txt
pip3 install -r requirements.txt
mac导出数据库
root>> mysqldump -uroot -p backend_sys > ~/desktop/backend_sys.sql
数据库上传到服务器
>scp sql本地的路径 [email protected]:/crm/
服务器端启动数据库
root>>systemctl start mariadb
root>>mysql
mysql>>create database backend_sys
mysql >>use backend_sys
导入数据库
mysql>source /crm/backend_sys.sql
2.使用uwsgi的命令,参数形式启动 crm项目
在项目根目录下面启动uwsgi
Backen_sys
Cd 到这个路径下
Backend_sys
wsgi.py
以往的python3 manage.py runserver
调用wsgiref去启动django,性能很低,单进程web
使用uwsgi启动django,可以支持并发,多进程,以及日志设置,多种功能
#必须在django项目,第一层敲这个命令
uwsgi --http :8000 --module mysite.wsgi
--http 指定是http协议,去启动项目
--module 指定django目录下的wsgi文件
#uwsgi支持的热加载命令
uwsgi --http :9000 --module backend_sys.wsgi --py-autoreload=1
4.浏览器访问:
172.16.250.129:9000 (直接访问资源服务器)
5.uwsgi不能存储静态文件 ==》nginx服务器可以处理==》步骤6
6.首先资源服务器中uwsgi另一种启动方式 uwsgi.ini
1.uwsgi以配置文件的形式启动 ,就是把你的启动参数,写入到一个文件中,然后,执行这个文件即可
配置文件名字可以叫做 uwsgi.ini ,内容如下,这个文件是手动生成的
1.touch uwsgi.ini ,写入如下内容
[uwsgi]
#Django-related settings
#the base directory (full path)
#填入项目的绝对路径 ,项目的第一层路径
chdir = /crm
Django's wsgi file
#指定第二层项目下的wsgi文件
module = backend_sys.wsgi
#the virtualenv (full path)
#找到虚拟环境的绝对路径
home = /python_virtualenv/crm_env
#process-related settings
#master
master = true
#以cpu核数来填写,uwsgi的工作进程数
processes = 2
#the socket (use the full path to be safe
#这是以uwsgi_socket协议启动的项目,无法再去通过浏览器访问,必须通过nginx以uwsgi协议去反向代理
#这是以uwsgi_socket协议启动的项目,无法再去通过浏览器访问,必须通过nginx以uwsgi协议去反向代理
#这是以uwsgi_socket协议启动的项目,无法再去通过浏览器访问,必须通过nginx以uwsgi协议去反向代理
socket = 0.0.0.0:8000
#也可以使用http协议去启动(仅用作调试使用)
#也可以使用http协议去启动(仅用作调试使用)
#也可以使用http协议去启动(仅用作调试使用)
#http = 0.0.0.0:9000
#with appropriate permissions - may be needed
chmod-socket = 664
#clear environment on exit
vacuum = true
#后台运行参数,将uwsgi运行在后台,并且将django日志输出到uwsgi.log中
daemonize = uwsgi.log
2.指定配置文件启动后台django项目
uwsgi --ini uwsgi.ini
3.如果ini文件中 指定http =0.0.00:8000 浏览器可以访问 ,浏览器输入ip即可访问,但是一般不会让用户直接访问服务器,而是将请求转发给nginx服务器,nginx服务器加载本地的静态文件,动态的数据再向后台资源服务器请求转发
所以指明 ini文件中 socket=0.0.0.0:8000 注释掉http=8000
【nginx服务器】的配置,反向代理uwsgi
1.修改nginx.conf如下 nginx向单个资源服务器转发
server {
listen 80;
server_name www.chouhuo.com;
location / {
#转发请求的方式配置在这里
#转发请求的方式配置在这里
#转发请求的方式配置在这里
include uwsgi_params;
uwsgi_pass 172.16.250.129:8000; #资源服务器的地址
}
}
Nginx服务器的请求可以向多台资源服务器访问
upstream mycom{
ip_hash;
server 10.11.0.1:8000; #负载均衡服务器群
server 10.11.0.1:8000;
server 10.11.0.1:8000 down;
}
location / {
include uwsgi_params;
uwsgi_pass mycom; #连接负载均衡服务器
}
————————————————
2.重新加载nginx,访问nginx,查看是否反向代理
去浏览器访问nginx的地址,查看能否访问到crm的内容
访问 172.16.250.128 nginx服务器地址
可以访问到django项目
3.收集资源服务器下crm的所有静态文件,将静态文件丢给nginx服务器去解析
对django的settings.py配置修改如下
#添加如下参数
STATIC_ROOT='/opt/static' #将静态资源存放在这个路径下
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
#执行命令,收集django的所有静态文件,系统会自动创建'/opt/static'
#如果是不同的服务器 则可以使用scp将静态文件赋值给nginx服务器中指定的目录下
python3 manage.py collectstatic
4,配置nginx,找到crm的这些静态资源
location / {
include uwsgi_params;
uwsgi_pass 172.16.250.130:8000; #向这个服务器发起资源访问请求 访问django服务器
}
# 添加一个location,针对nginx的url进行匹配处理
# 当请求时 www.oldchouhuo.com/static/..... 这样的url的时候,nginx进行别名修改,去/opt/static底下去寻找资源文件
#
• location /static {
• alias /opt/static;
}
5.此时再次访问网站,查看是否处理了静态资源 www.chouhuo.com