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
文章浏览阅读707次。点击项目VCS-->Update Project 即可将所有模块的代码pull到本地_idea 多个git 项目一起拉取 pull
文章浏览阅读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
文章浏览阅读3.8k次,点赞61次,收藏41次。华为Could API人工智能系列——文本合成MP3音频_api-huacloud.net
文章浏览阅读9.9k次。map的基本使用:map函数一手包办了序列操作,参数传递和结果保存等一系列的操作。from multiprocessing.dummy import Poolpoop = Pool(4) # 4代表电脑是多少核的results = pool.map(爬取函数,网址列表)from multiprocessing.dummy import Pool as ThreadPool..._multiprocessing map
文章浏览阅读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
文章浏览阅读305次。今日授课目标能够理解SpringBoot的设计初衷,开发环境要求能够搭建SpringBoot的开发工程能够理解SpringBoot的配置文件常见配置ApplactionContext.xml导包配置文件api(new对象)能够使用SpringBoot整合MyBatis,整合Redis进行缓存,整合RestTemplate发送Http请求能够使用SpringBoot进行简单代码测试能够打包部署SpringBoot项目学习今日内容,必备基础知识:Spring的对象ioc容器
文章浏览阅读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编译出错
文章浏览阅读2.3k次,点赞2次,收藏16次。2019独角兽企业重金招聘Python工程师标准>>> ..._java 把sm2公钥的r s, 按照asn1的标准计算
文章浏览阅读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:
文章浏览阅读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网络安装操作系统
文章浏览阅读2.4k次。如下面的图片所示,我们在自动化测试中,需要得到view控件的内容,但是因为某些原因,app不是让你轻易得到数据,这里提供一个思路来提取数据,当然不是最好的,大家有好的想法,欢迎指出。思路:长按内容。 在出现复制标签后,点击复制。 从剪切板读取内容。代码: UiObject res0 = new UiObject(new UiSelector().resourc..._android.view.view内容无法提取
文章浏览阅读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