nginx 学习+案例练习_nginx 使用pipe:rollback-程序员宅基地

技术标签: python  nginx  部署  

nginx软件学习

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

nginx的核心学习方式,配置文件学习

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 传输的时候将数据进行压缩,节省带宽
....
}

 

3.nginx的虚拟主机配置,核心功能再次

在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(资源服务器)

6.nginx负载均衡

环境准备
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

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/koukou0419/article/details/101316636

智能推荐

软件测试流程包括哪些内容?测试方法有哪些?_测试过程管理中包含哪些过程-程序员宅基地

文章浏览阅读2.9k次,点赞8次,收藏14次。测试主要做什么?这完全都体现在测试流程中,同时测试流程是面试问题中出现频率最高的,这不仅是因为测试流程很重要,而是在面试过程中这短短的半小时到一个小时的时间,通过测试流程就可以判断出应聘者是否合适,故在测试流程中包含了测试工作的核心内容,例如需求分析,测试用例的设计,测试执行,缺陷等重要的过程。..._测试过程管理中包含哪些过程

政府数字化政务的人工智能与机器学习应用:如何提高政府工作效率-程序员宅基地

文章浏览阅读870次,点赞16次,收藏19次。1.背景介绍政府数字化政务是指政府利用数字技术、互联网、大数据、人工智能等新技术手段,对政府政务进行数字化改革,提高政府工作效率,提升政府服务质量的过程。随着人工智能(AI)和机器学习(ML)技术的快速发展,政府数字化政务中的人工智能与机器学习应用也逐渐成为政府改革的重要内容。政府数字化政务的人工智能与机器学习应用涉及多个领域,包括政策决策、政府服务、公共安全、社会治理等。在这些领域,人工...

ssm+mysql+微信小程序考研刷题平台_mysql刷题软件-程序员宅基地

文章浏览阅读219次,点赞2次,收藏4次。系统主要的用户为用户、管理员,他们的具体权限如下:用户:用户登录后可以对管理员上传的学习视频进行学习。用户可以选择题型进行练习。用户选择小程序提供的考研科目进行相关训练。用户可以进行水平测试,并且查看相关成绩用户可以进行错题集的整理管理员:管理员登录后可管理个人基本信息管理员登录后可管理个人基本信息管理员可以上传、发布考研的相关例题及其分析,并对题型进行管理管理员可以进行查看、搜索考研题目及错题情况。_mysql刷题软件

根据java代码描绘uml类图_Myeclipse8.5下JAVA代码导成UML类图-程序员宅基地

文章浏览阅读1.4k次。myelipse里有UML1和UML2两种方式,UML2功能更强大,但是两者生成过程差别不大1.建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int..._根据以下java代码画出类图

Flume自定义拦截器-程序员宅基地

文章浏览阅读174次。需求:一个topic包含很多个表信息,需要自动根据json字符串中的字段来写入到hive不同的表对应的路径中。发送到Kafka中的数据原本最外层原本没有pkDay和project,只有data和name。因为担心data里面会空值,所以根同事商量,让他们在最外层添加了project和pkDay字段。pkDay字段用于表的自动分区,proejct和name合起来用于自动拼接hive表的名称为 ..._flume拦截器自定义开发 kafka

java同时输入不同类型数据,Java Spring中同时访问多种不同数据库-程序员宅基地

文章浏览阅读380次。原标题:Java Spring中同时访问多种不同数据库 多样的工作要求,可以使用不同的工作方法,只要能获得结果,就不会徒劳。开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中。使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多个数据库的话事件就变得复杂多了。本文以在Spring框架下开发一个Sp..._根据输入的不同连接不同的数据库

随便推点

EFT试验复位案例分析_eft电路图-程序员宅基地

文章浏览阅读3.6k次,点赞9次,收藏25次。本案例描述了晶振屏蔽以及开关电源变压器屏蔽对系统稳定工作的影响, 硬件设计时应考虑。_eft电路图

MR21更改价格_mr21 对于物料 zba89121 存在一个当前或未来标准价格-程序员宅基地

文章浏览阅读1.1k次。对于物料价格的更改,可以采取不同的手段:首先,我们来介绍MR21的方式。 需要说明的是,如果要对某一产品进行价格修改,必须满足的前提条件是: ■ 1、必须对价格生效的物料期间与对应会计期间进行开启; ■ 2、该产品在该物料期间未发生物料移动。执行MR21,例如更改物料1180051689的价格为20000元,系统提示“对于物料1180051689 存在一个当前或未来标准价格”,这是因为已经对该..._mr21 对于物料 zba89121 存在一个当前或未来标准价格

联想启天m420刷bios_联想启天M420台式机怎么装win7系统(完美解决usb)-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏13次。[文章导读]联想启天M420是一款商用台式电脑,预装的是win10系统,用户还是喜欢win7系统,该台式机采用的intel 8代i5 8500CPU,在安装安装win7时有很多问题,在安装win7时要在BIOS中“关闭安全启动”和“开启兼容模式”,并且安装过程中usb不能使用,要采用联想win7新机型安装,且默认采用的uefi+gpt模式,要改成legacy+mbr引导,那么联想启天M420台式电..._启天m420刷bios

冗余数据一致性,到底如何保证?-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏9次。一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能..._保证冗余性

java 打包插件-程序员宅基地

文章浏览阅读88次。是时候闭环Java应用了 原创 2016-08-16 张开涛 你曾经因为部署/上线而痛苦吗?你曾经因为要去运维那改配置而烦恼吗?在我接触过的一些部署/上线方式中,曾碰到过以下一些问题:1、程序代码和依赖都是人工上传到服务器,不是通过工具进行部署和发布;2、目录结构没有规范,jar启动时通过-classpath任意指定;3、fat jar,把程序代码、配置文件和依赖jar都打包到一个jar中,改配置..._那么需要把上面的defaultjavatyperesolver类打包到插件中

VS2015,Microsoft Visual Studio 2005,SourceInsight4.0使用经验,Visual AssistX番茄助手的安装与基本使用9_番茄助手颜色-程序员宅基地

文章浏览阅读909次。1.得下载一个番茄插件,按alt+g才可以有函数跳转功能。2.不安装番茄插件,按F12也可以有跳转功能。3.进公司的VS工程是D:\sync\build\win路径,.sln才是打开工程的方式,一个是VS2005打开的,一个是VS2013打开的。4.公司库里的线程接口,在CmThreadManager.h 里,这个里面是我们的线程库,可以直接拿来用。CreateUserTaskThre..._番茄助手颜色

推荐文章

热门文章

相关标签