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

智能推荐

idea中如何pull多个模块项目_idea 多个git 项目一起拉取 pull-程序员宅基地

文章浏览阅读707次。点击项目VCS-->Update Project 即可将所有模块的代码pull到本地_idea 多个git 项目一起拉取 pull

php 5.4.23,PHP 5.5.7/5.4.23/5.3.28 紧急发布-程序员宅基地

文章浏览阅读68次。PHP 5.5.7/5.4.23/5.3.28紧急发布.2013-12-13.上个版本是2013-11-14的5.5.6/5.4.22。全部修正了一个 OpenSSL的安全漏洞(CVE-2013-6420)5.3本来已停止常规开发也更新了。 总共修正了10几个Bug(包括Opcache的几个Bug)及安全漏洞。完全改进:Version 5.5.712-Dec-2013Core:Fixed bu..._cve-2013-6420

华为Could API人工智能系列——文本合成MP3音频_api-huacloud.net-程序员宅基地

文章浏览阅读3.8k次,点赞61次,收藏41次。华为Could API人工智能系列——文本合成MP3音频_api-huacloud.net

python多进程(multiprocessing)(map)_multiprocessing map-程序员宅基地

文章浏览阅读9.9k次。map的基本使用:map函数一手包办了序列操作,参数传递和结果保存等一系列的操作。from multiprocessing.dummy import Poolpoop = Pool(4) # 4代表电脑是多少核的results = pool.map(爬取函数,网址列表)from multiprocessing.dummy import Pool as ThreadPool..._multiprocessing map

文字居中、水平居中、垂直居中_垂直居中 text-align-last:center-程序员宅基地

文章浏览阅读773次。1、效果2、应用场景:表单文字对齐、按钮内均匀分布…3、源码<div style="width:400px;background-color:#eee;text-align-last:justify"> 水平均匀分布 </div> <div style="width:400px;background-color:green;text-align:center"> 居中 </div> <div style="_垂直居中 text-align-last:center

SpringBoot-总结-程序员宅基地

文章浏览阅读305次。今日授课目标能够理解SpringBoot的设计初衷,开发环境要求能够搭建SpringBoot的开发工程能够理解SpringBoot的配置文件常见配置ApplactionContext.xml导包配置文件api(new对象)能够使用SpringBoot整合MyBatis,整合Redis进行缓存,整合RestTemplate发送Http请求能够使用SpringBoot进行简单代码测试能够打包部署SpringBoot项目学习今日内容,必备基础知识:Spring的对象ioc容器

随便推点

realsense相机SDK——librealsense使用方法及bug解决(ubuntu)_realsnese相机sdk编译出错-程序员宅基地

文章浏览阅读7.3k次,点赞3次,收藏48次。realsense环境配置参考https://blog.csdn.net/m0_43436602/article/details/110930512一、librealsense在哪里?安装完环境之后,可以去根目录下搜一下librealsense2.so看看,如果是用apt装的librealsense,应该和我的差不多。二、realsense库怎么用?我是apt install ros-kinetic-librealsense2安装的librealsense,故库文件的位置在opt/._realsnese相机sdk编译出错

SM2椭圆曲线公钥密码算法的JAVA实现-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏16次。2019独角兽企业重金招聘Python工程师标准>>> ..._java 把sm2公钥的r s, 按照asn1的标准计算

转载UnicodeDecodeError: ‘utf-8‘ codec can‘t decode bytes in position 1022-1023: unexpected end of data_unicodedecodeerror: 'utf-8' codec can't decode byt-程序员宅基地

文章浏览阅读6.9k次。仅作为记录,大佬请跳过。运行python程序时,出现UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1022-1023: unexpected end of data解决方案(博主未使用,多次运行就又好了)转载:传送门在开头输入:#!/usr/bin/env Python# coding=utf-8..._unicodedecodeerror: 'utf-8' codec can't decode bytes in position 1022-1023:

华为服务器如何通过bmc装系统,华为BMC管理模块介绍及指南-程序员宅基地

文章浏览阅读5.5k次。【实例简介】华为服务器服务工程师的培训教材,其中针对华为服务器BMC管理模块的配置及使用做了详细的介绍。目录1.BMC介绍2.BMC远程管理功能介绍HUAWEI TECHNOLOGIES CO, TDHuawei ConfidentialHUAWEI目录1.BMC介绍1.1BMC简介1.2BMC功能模块1.3BMC运行环境2.BMC远程管理功能介绍HUAWEI TECHNOLOGIES CO, T..._华为服务器如果通过bmc网络安装操作系统

uiautomatorviewer 无法得到android.view.view控件的内容_android.view.view内容无法提取-程序员宅基地

文章浏览阅读2.4k次。如下面的图片所示,我们在自动化测试中,需要得到view控件的内容,但是因为某些原因,app不是让你轻易得到数据,这里提供一个思路来提取数据,当然不是最好的,大家有好的想法,欢迎指出。思路:长按内容。 在出现复制标签后,点击复制。 从剪切板读取内容。代码: UiObject res0 = new UiObject(new UiSelector().resourc..._android.view.view内容无法提取

使用VScode 调试的时候提示Unable to start debugging_unable to start debugging. launch options string p-程序员宅基地

文章浏览阅读4.8w次,点赞13次,收藏8次。使用VScode 调试的时候提示Unable to start debugging. Launch options string provided by the project system is invalid. Unable to determine path to debugger. Please specify the "MIDebuggerPath" option.提示这个错误。..._unable to start debugging. launch options string provided by the project sys

推荐文章

热门文章

相关标签