Open keyfall opened 5 years ago
安装依赖包
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
如果出现版本不一样,直接安装需要的版本就行就行
apt-get install libpcre3=2:8.38-3.1
安装nginx
cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -xvf nginx-1.13.7.tar.gz
编译nginx
# 进入nginx目录
/usr/local/nginx/nginx-1.13.7
# 执行命令
./configure
# 执行make命令
make
# 执行make install命令
make install
启动nginx
#进入nginx启动目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx
上面用的是安装包方法,下面使用apt下载(我是没成功)
sudo su root
apt-get install nginx
参考地址:https://blog.csdn.net/qq_23832313/article/details/83578836
sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。
sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。
sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。
sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。
netstat -ntlp
查看进程
操作命令前,需要进入nginx目录
cd /usr/local/nginx/sbin
查看版本号
./nginx -v
关闭nginx
./nginx -s stop
开启nginx
./nginx -s reload
查看nginx.conf
nginx -t
位置是/usr/local/nginx/conf/nginx.conf 三部分: 第一部分 全局块 从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令 worker_processes 1; worker_processes值越大,可以支持的并发处理量也越多
第二部分 events块 events块涉及的指令主要影响nginx服务器与用户的网络连接
第三部分 http块
nginx实战
准备
安装一个tomcat,8.5版本以后就没有登录界面了,可以创建dockerfile进行设置添加
Ubuntu常用防火墙命令
对外开放访问端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
查看已经开放的端口号
firewall-cmd --list-all
反向代理实例1:浏览器输入www.123.com,跳转到linux系统tomcat主页面中 nginx配置 这里新建/etc/nginx/conf.d/usetomcat.conf server_name 是虚拟机的ip proxy_pass是虚拟机内的地址 8080被tomcat占用 浏览器进入10.4.7.55,在被proxy_pass转发到127.0.0.1:8080
反向实例2:通过一个域名,根据不同的目录进入两个不同的网站地址(这可以分为手机端和电脑端吧) tomcat方面 建立两个文件夹tomcat8080,tomcat8081,各解压一个tomcat 8081中/ceshi/tomcat8081/apache-tomcat-8.5.51/conf,这个conf文件夹修改server.xml,把里面的port改一下 Connector标签的port改成8081
创建nginx中server实例规则 新建/etc/nginx/conf.d/tworedirectfordir.conf
server {
listen 9001;
server_name 10.4.7.55;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
监听9001,10.4.7.55:9001进入 /edu/进入8080的tomcat的webapps/edu /vod/进入8081的vod
最后在各自的tomcat的webapps中新建对应的edu或者vod目录,放入一个html /ceshi/tomcat8080/apache-tomcat-8.5.51/webapps/edu
测试
把请求进行分发到不同的服务器中,使每个服务器的请求减少,压力减少
tomcat方面 在8080新建vod文件夹放入a.html文件 令两个tomcat路径相同
nginx配置 使用80端口,直接修改usetomcat.conf
upstream myserver{
server 10.4.7.55:8080 weight=4;
server 10.4.7.55:8081 weight=2;
}
server{
listen 80;
server_name 10.4.7.55;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
}
测试:输入http://10.4.7.55/vod/a.html
,持续刷新,会发现显示不同的tomcat中的html中的内容
就是把动态请求和静态请求分开 nginx处理静态,tomcat处理动态
新建/data/image,里面放入一个张图一个页面都可以 nginx设置
server{
listen 80;
server_name 10.4.7.55;
location /www/ {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
location /image/ {
root /data/;
autoindex on;
expires 3d;
}
}
tomcat处理动态,感觉这么写可以
root /data/意思是根目录是/data,地址写成http://10.4.7.55/image/1.jpg
就可以,data是image的上级目录,这里不能写成data/(不能少了前面的/),代表的路径不同,少了/,不能访问,就是可以进入系统根目录,不能进入当前用户主目录,后面的/带不带没问题
autoindex on 意思是显示目录,http://10.4.7.55/image/
,这时候会以目录形式显示image目录下的内容,如果把image删除了,就不能看了
expires 3d,意思是内容缓存3天,但是没有访问过的文件就访问不到了
和root对应的还有一个alias,alias是准确目录,准确体现在location对应的path目录(/image/)后面的/,如果没有加,那输入url地址时加不加都没关系,如果加了/,那输入url的时候image后面也必须有/,否则访问不了
测试:输入http://10.4.7.55/image/1.jpg
,然后删除image目录,再访问,还是能访问到
ubuntu 设置网络
ip addr的时候没有ip(这是弄好的)
设置ip,子网掩码,网关
sudo vim /etc/network/interfaces
设置DNS
sudo vim /etc/systemd/resolved.conf
重启
sudo service network-manager restart
安装jdk8
sudo apt-get install openjdk-8-jdk
安装tomcat8
阿里巴巴镜像下载
放到usr/local/tomcat目录中
tar -zxvf apache-tomcat-8.5.51.tar.gz
进入bin目录
'./startup.sh '
tomcat启动了,然后浏览器localhost:8080检查一下
关闭tomcat
'./shutdown.sh'
配置环境
sudo vim startup.sh
在exec "$PRGDIR"/"$EXECUTABLE" start "$@"前面加上以下内容:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}:$PATH
export CLASSPATH=.:${JRE_HOME}/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export TOMCAT_HOME=/opt/tomcat8/apache-tomcat-8.5.15
JAVA_HOME地址是jdk的地址(按照上面方法装,直接cv就行) 查看jdk地址
对shutdown.sh进行上面一样的操作
然后再打开tomcat,没报错就好了
nginx安装到成功的悲惨经历: 我的经历就跟下面的快照图一样
第一次 使用docker安装tomcat容器,这里pull,run进行开启,先是下载了tomcat最新版,浏览器死活不出来主页,后来看有人说是tomcat8.5以后默认没有(估计是镜像不行,直接安装包会出来),改了7后就有了主页,安装包安装nginx(这里进行安装包依赖倒是没出什么错),在nginx.conf设置了转发,设置本地ip,死活转发不过去,找半天ip啥的,docker有一个虚拟ip,用了,也没用,弃坑
进行快照恢复,进行第二次 看网上有的说安装完整版啥的,试了,后来报错了,就不用了,然后照上面的issue方法安装jdk,tomcat,成功,安装nginx,先进行了安装包依赖,之前第一次的时候没问题,现在出问题了,说已经安装了,但是安装的版本高于现在要安装的版本,所以需要降级,然后降级查半天,试了aptitude(打死不用这个了),aptitude会把apt-get删除,但是进行降级下载的时候还是会使用apt-get里面的http文件夹(具体在哪里忘了),再恢复0.0,直接apt-get install package=版本,这里=左右不能空格,这才安装好了,后来安装到某个地方,发现图标啥的都没了,想想进行重启,直接generic(命令行版)了,又各种想干了什么,哪里出的错,查到apt-get install zlib1g zlib1g-dev(这里降级的时候删了300个东西,然后就啥都没了,估计都是依赖原版本的东西),进行zlib1g降级(这里降级了回不去了),后来想想如果能运行的话,管他什么generic了,继续下去,结果安装包版nginx弄好了,进行nginx.conf配置,也可以转发了,这里证明docker和nginx别混用(或者需要另外配置,另外docker的tomcat容器和nginx容器还没试过呢),不过重启之后,转发就错了,浏览器的页面变成了error了,这里再进行快照恢复到tomcat安装好,安装nginx,这次使用在线安装,上次使用过,nginx的配置文件配置了没用,这次成功了,找到配置文件了,然后进行配置,还是默认页面,查找配置文件,发现里面有2个include 两个都查了,一个是空,一个有个defaule(这个可以当范本,怎么写conf),估计就是这个问题,vim后,里面全是default啥的 然后把配置文件中include指向default的注释,重启nginx,完美解决了
经过这件事,我觉得进行一切异常操作之前都进行快照,最好不要进行安装包安装,除非有了完整的稳定的版本
查看所有端口
netstat -ntlp
cd到跳转前的目录
cd -
cd到当前用户主目录
cd
cd ~
cd 到系统根目录
cd /
权限数字 4=r,2=w,1=x x是执行
通过keepalived,保证一台nginx挂掉了,自动转到第二台 通过虚拟ip,使外部访问虚拟ip,再两台nginx中分别绑定虚拟ip,由keepalived去操心挂了
首先安装keepalived,我这里又出现很多的依赖包冲突
apt-get install keepalived
安装好后,一般在/etc/keepalived文件夹里有keepalived.conf,我这里又没有,还好不使用默认的
如果没有就新建keepalived.conf,有就修改
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129(这里是什么不重要,是邮件的服务器)
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port { #添加一个脚本,周期执行
script "/usr/local/src/nginx_check.sh"(这是脚本地址)
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP # 主服务器写MASTER,备份写BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相
同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机
值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.4.7.60 // VRRP H 虚拟地址,这里所有的服务器都要相同,写ip地址,最后60可以随便改,比如10.6.7.60这个就不行了
}
}
/usr/local/src/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx # 这里是nginx启动地址,根据自己的修改
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
然后在备用服务器也装上keepalived,进行keepalived配置和nginx_check.sh配置
测试:
两个服务器都启动
service nginx start
service keepalived start
浏览器输入http://10.4.7.60
,看到nginx欢迎页面,接着关闭主服务器的nginx.keepalived,刷新http://10.4.7.60
,发现还是有nginx欢迎页面
ip add
可以发现绑定了10.4.7.60
,使用哪个服务器,哪个能显示绑定
nginx简介
高性能HTTP和反向代理服务器,特点是占有内存少,并发能强,nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载,可以支持高达50000个并发连接 主要功能是反向代理,负载均衡,动静分离
安装nginx
正向代理和反向代理
正向代理 客户端要访问一个网站,输入网址后,不能直接到达网址所在的服务器,需要经过一个代理服务器,由代理服务器进行访问 正向代理需要设置一个代理服务器,然后通过代理服务器需要访问哪个网站。
反向代理 客户端对服务器代理无感知的,就是发送一个网址,然后接收到一个页面,而反向代理就是一台服务器,绑定了客户端的域名,收到客户端发来的请求,根据请求(直接域名,或者域名/目录),发送到另一个服务器,获取数据后,返回给客户端,简单意思就是实现一个接受请求,然后分发请求,很方便实现负载均衡,动静分离的功能
正向代理和反向代理区别
负载均衡
单个服务器解决不了,增加服务器的数量,将请求分发到各个服务器上,让之前一个服务器扛不住的请求发到多个服务器上
动静分离
就是把动态页面和静态页面由不同的服务器来解析,加快解析速度