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本地的路径  root@172.16.250.129:/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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值