docker安装nginx实现负载均衡docker安装nginx实现负载均衡
1docker安装nginx
此过程中将配置信息挂载到了宿主机内,所以可以在宿主机进⾏修改配置⽂件
第⼀步:拉取ngnix镜像 (从这⾥hub.docker去查)
docker pull nginx
第⼆步:查看images镜像
docker images
第三步:简单启动(这个⽬的是为了拿到nginx的默认资源⽂件,默认会释放到/etc/nginx⽬录) docker run --name nginx -d nginx
检测安装的内容,可以查看nginx下/etc/nginx⽂件夹下的内容,执⾏不执⾏都可以
docker exec nginx ls -l /etc/nginx
第四步:拷贝安装好的配置⽂件(将nginx容器服务中的⽂件拷贝宿主机指定⽬录)
docker cp -a nginx:/etc/nginx /usr/local/docker/nginx
强制卸载刚刚安装的nginx,不⽤执⾏
docker rm -f nginx
第六步:启动nginx容器,运⾏nginx镜像
sudo docker run -p 80:80 --restart always --name nginx \
-v /usr/local/docker/nginx/:/etc/nginx/ \
-v /usr/local/docker/nginx/conf.d:/etc/nginx/conf.d \
-d nginxnginx 配置文件
第七步:进⾏访问检测,如图所⽰:
2nginx⼊门
docker下ngidnx容器的创建和启动(假如已有则⽆需再创建启动)
sudo docker run -p 80:80 --restart always --name nginx \
-v /usr/local/docker/nginx/:/etc/nginx/ \
-v /usr/local/docker/nginx/conf.d:/etc/nginx/conf.d \
-d nginx
说明:nginx的启动必须在根⽬录中执⾏.
开启nginx
docker start nginx
重启nginx
docker restart nginx
停⽌nginx
docker stop nginx
进⼊nginx容器
docker exec -it nginx bash
查看nginx版本(docker中需要在容器内部执⾏)
nginx -v
重新加载配置⽂件(docker中需要在容器内部执⾏)
service nginx reload
3核⼼配置⽂件
Nginx的核⼼配置为conf⽬录下的f,其初始默认配置如下:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/pes;
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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf; #嵌套
}
其中,nginx的配置有三部分构成,在docker环境中nginx采⽤了嵌套加载⽅式,即主配置在/etc/f中,然⽽平时⽤到的server配置在/etc/nginx/conf.d中,在主配置中见include指令部分,在conf.d⽬录下默认会有⼀个f⽂件,这部分配置⽂件就是基本的server配置。⽆论采⽤怎样的配置⽅式,f都只有这三部分构成,例如:
§ 全局块:配置⽂件开始到events中间的部分内容,主要是结合硬件资源进⾏配置
§ events块:这块主要是⽹络配置相关内容,硬件性能好,连接数可以配置更多
§ http块:nginx配置中最核⼼部分,可以配置请求转发,负载均衡等。
3⼊门案例
第⼀步:准备SpringBoot的web服务,并打成jar包(例如tomcat8901.jar)
将此springboot项⽬以8901,8902,8903打成3个jar包,放到宿主机的⽬录中
@RestController
public class HelloController {
@Value("${server.port}")
private String port;
//要求动态获取真实服务器端⼝号
@RequestMapping("/hello")
public String doSayHello(){
return"server:"+port+" say hello ";
}
}
将项⽬放进宿主机的/usr/local/tomcatweb⽬录下,⽬录可以随意指定,只要得到
后台启动SpringBoot项⽬,按照这种⽅式将三个SpringBoot项⽬启动
nohup java -jar tomcatweb8901.jar > catalina8901.out 2>&1 &
查看启动运⾏⽇志
cat catalina8901.out
nohup命令详解
nohup:不挂断地运⾏命令,退出帐户之后继续运⾏相应的进程。
>⽇志⽂件名.log:是nohup把command的输出重定向到当前⽬录的指定的“⽇志⽂件名.log”⽂件中,即输出内容不打印到屏幕上,⽽是输出到”⽇志⽂件名.log”⽂件中。不指定⽂件名会在当前⽬录创建nohup.out,如果当前⽬录的 nohup.out ⽂件不可写,输出重定向到$HOME/nohup.out ⽂件中。如果没有⽂件能创建或打开以⽤于追加,那么 Command 参数指定的命令不可调⽤。
2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这⾥&相当于标准错误等效于标准输出,即把标准错误和标准输出同时输出到指定的“⽇志⽂件名.log”⽂件中。
java -jar ⾃⼰的springboot项⽬.jar:执⾏springboot的项⽬,如果单单只执⾏该命令,linux只会短暂的运⾏该项⽬,当退出控制台后会⾃动关闭该项⽬。
最后的&:让该作业在后台运⾏。
nohup java -jar waimaiurl-0.0.1-SNAPSHOT.jar >/home/ubuntu/clf/test.log>&1 &
nohup java -jar 项⽬名称.jar >/路径名称/输出的⽇志名称.log>&1&
杀死后台进程
使⽤jobs -l 可以查看nohup后台运⾏的进程
jobs -l
使⽤kill -9 pid号进⾏杀死进程
kill -9 pid
配置请求转发
配置nginx实现请求的转换,在docker环境下可编辑
/usr/local/default/nginx/conf.d/⽬录中的f⽂件,详细配置请求转发见红⾊代码如下:
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass 192.168.174.130:8901;
#root /usr/share/nginx/html;
#index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass 127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 #
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论