DotNet跨平台
环境:CentOS7
服务器需要安装:docker、nginx、OpenSSL
一、部署方案
在linux服务器上,我们的Web站点程序采用docker容器部署,为了演示负载均衡,我们在同一台linux服务器上部署两个web站点容器,然后配置nginx做反向代理和负载均衡,再给站点配置SSL证书。
二、安装openssl
//yum安装openssl:yum install openssl yum install openssl-devel
三、安装nginx
//安装nginx:curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmrpm -ivh nginx.rpmyum install nginx
四、安装docker
参考:DotNet跨平台 - docker部署.net core2.0项目
五、配置nginx
1.用nginx来做负载均衡
有多种配置方法,这里我们用的是ip_hash,这种模式会根据来源IP和后端配置来做hash分配,确保固定IP只访问一个后端。
其他配置方法可以参考:https://www.cnblogs.com/xusion/articles/2853352.html
我们将两个web站点容器的IP指定为172.18.0.2和172.18.0.3,如何指定IP我们下面会讲
#我们部署了两个web站点容器,端口号分别为8056和8057
upstream blance {ip_hash;server 172.18.0.2:8056 weight=5 max_fails=3 fail_timeout=30s;server 172.18.0.3:8057 weight=5 max_fails=3;}
2.配置ssl证书
首先需要申请ssl证书,大家可以在阿里云申请免费的证书,这个大家可以参考:https://www.cnblogs.com/osfipin/p/freessl.html
证书申请下来后,将下载下来的两个文件上传至服务器,我们上传至/etc/ssl/cert/ 这个目录,https的默认端口是443,完整的server配置如下:
# Settings for a TLS enabled server.server {listen 443 ssl;server_name yourwebsite.cn; #填写绑定证书的域名#ssl on;#root /usr/share/nginx/html;#index index.html index.htm;ssl_certificate /etc/ssl/cert/_.yourwebsite.cn_bundle.crt;ssl_certificate_key /etc/ssl/cert/yourwebsite.cn.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置ssl_prefer_server_ciphers on;location / { #文件夹root html;#主页文件index index.html index.htm;proxy_pass http://blance; } }
3.配置上传文件大小限制
如果站点需要上传文件,你会发现大一点的文件无法上传成功,那是因为nginx默认是限制文件大小的,我们可以做一下配置,一共有三种方法,可以根据实际需要来配置:
可以选择在http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;
三者到区别是:http{} 中控制着所有nginx收到的请求。而报文大小限制设置在server{}中,则控制该server收到的请求报文大小,同理,如果配置在location中,则报文大小限制,只对匹配了location 路由规则的请求生效。
nginx.conf 文件修改后记着要执行 nginx –s reload 命令来生效
六、启动容器
所有的准备工作都做好后,我们执命令来启动站点容器 --name 指定容器名字,--ip指定容器ip:
docker run --restart=always --name youame --ip 172.18.0.2 -d -p 8056:8056 website:1.0
docker run --restart=always --name youame --ip 172.18.0.3 -d -p 8057:8056 website:1.0
我们通过docker ps命令来查看我们的两个站点容器的运行状态,如果都正常启动了,那么恭喜你!
七、一些知识点
#每次重启站点容器,站点的IP就可能发生变化,这样我们在nginx.conf里配置的IP就会失效,所以我们上面启动容器的时候指定了IP。
#获取容器内部IP使用命令
docker inspect 容器ID
#然后过滤出 IPAddress 即可查看容器的 IP
docker inspect 容器ID | grep IPAddress
#docker network命令用来管理docker的网络,首先创建一个网络,命名为mynetwork,然后运行容器,指定该网络
docker network create --subnet=172.18.0.0/16 mynetwork
docker run --restart=always --name youame --net mynetwork --ip 172.18.0.3 -d -p 8057:8056 website:1.0
有时候我们需要进入容器内部查看一下文件,因为容器内没有安装vim,所以需要我们手动安装一下
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
#更新安装源apt-get updateapt-get install -y vim
完整的nginx.conf如下:
user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events {worker_connections 1024;}http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr "';access_log /var/log/nginx/access.log main;sendfileon;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;types_hash_max_size 2048;client_max_body_size 10m;include /etc/nginx/mime.types;default_typeapplication/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;upstream blance {ip_hash;server 172.18.0.2:8056 weight=5 max_fails=3 fail_timeout=30s;server 172.18.0.3:8057 weight=5 max_fails=3;}server {listen80;server_name yourwebsite.cn;#root /usr/share/nginx/html;rewrite ^(.*)$ https://$server_name$1 permanent; # 把http的域名请求转成https# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {roothtml;index index.html index.htm;proxy_pass http://yourwebsite.cn;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}# Settings for a TLS enabled server.server {listen 443 ssl;server_name yourwebsite.cn; #填写绑定证书的域名#ssl on;#root /usr/share/nginx/html;#index index.html index.htm;ssl_certificate /etc/ssl/cert/_.yourwebsite.cn_bundle.crt;ssl_certificate_key /etc/ssl/cert/yourwebsite.cn.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置ssl_prefer_server_ciphers on;location / { #文件夹root html;#主页文件index index.html index.htm;proxy_pass http://blance; } }}
作者:小丑不戴面具
来源链接:https://www.cnblogs.com/nowar/p/12431321.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。