美其名曰,域名访问过程中一台服务器挂了,自动切换到另一台服务器。
环境说明
准备三台服务器,并且全部在同一个内网!
注:如网站还有数据库,数据库服务器可以部署独立服务器最好是部署个集群保证数据库稳定可靠。
外网nginx服务器一台使用80、443端口 [代理服务器]
ip: 102.78.32.128 [静态IP] 该服务器不需要放网站的文件,仅做代理使用
解析域名nginx.ys.com 至该服务器,后续期望通过http访问和https证书形式实现访问
内网nginx服务器2台使用80端口
服务器1IP 172.16.133.200 主服务器 需要放置网站文件至/home/web路径下
服务器2IP:172.16.133.201 备用服务器 需要放置网站文件至/home/web路径下
准备环境
三台服务器全部不是nginx1.17.2具体见我的文章如下:
nginx1.17.2部署点击查看博文
进入主服务器:
配置nginx.conf如下【可根据自己需求配置自己的nginx】:
#rm -rf /usr/local/nginx/conf/nginx.conf #删除默认nginx
#vi /usr/local/nginx/conf/nginx.conf #创建并编辑
按键盘 i 键进入编辑模式 ,复制并黏贴如下配置:
user www www;
worker_processes 4;
#error_log /home/logs/error.log;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
client_max_body_size 5000M; #上传文件大小限制5g
fastcgi_connect_timeout 3000;
fastcgi_send_timeout 3000;
fastcgi_read_timeout 3000;
fastcgi_buffer_size 256k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php ;
gzip_disable "MSIE [1-6]\.";
include /usr/local/nginx/conf/conf.d/*.conf;
include /home/nginx/conf/*.conf;
}
----------------------------结束 按键ESC 输入:wq 回车 保存
#chmod +x /usr/local/nginx/conf/nginx.conf #给予执行权限
开始配置nginx静态IP服务器配置[即代理服务器]
主服务器配置如下:
#vi /home/nginx/conf/web.conf #创建nginx配置文件
按键盘 i 键进入编辑模式 ,复制并黏贴如下配置:
upstream gw1_server {
server 172.16.133.200:80; #主用服务器
server 172.16.133.201:80 backup; #主服务器宕机,自动切换备用服务器
}
server {
listen 80;
server_name nginx.ys.com;
rewrite ^(.*)$ https://${server_name}$1 permanent; #访问http网站自动跳至https
}
server {
listen 443 ;
server_name nginx.ys.com;
ssl_certificate /home/nginx.ys.com.pem; #ssl证书路径
ssl_certificate_key /home/nginx.ys.com.key; #ssl证书路径
gzip on;
gzip_comp_level 6;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-icon;
charset utf-8;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_pass http://gw1_server;
}
}
----------------------------结束 按键ESC 输入:wq 回车 保存
#chmod +x /home/nginx/conf/web.conf #给予执行权限
主备服务器配置相同具体如下172.16.133.200/172.16.133.201:
事先需要把网站源码放置服务器的/home/web/路径下
主服务器配置如下:
#vi /home/nginx/conf/web.conf #创建nginx配置文件【演示的测试网站配置,具体网站配置根据自己网站开发框架要求进行】
按键盘 i 键进入编辑模式 ,复制并黏贴如下配置:
server {
listen 80; #端口80
server_name all;
root /home/web; #网站路径
index index.html index.htm; #首页配置
location ~ .*\.(gif|jpg|jpeg|png|bmp)$ {
expires 100d;
}
location ~ .*\.(js|css)?$ {
expires 30d;
}
error_page 500 502 503 504 /50x.html;
}
----------------------------结束 按键ESC 输入:wq 回车 保存
#chmod +x /home/nginx/conf/web.conf #给予执行权限
#/usr/local/nginx/sbin/nginx -s reload #重启
ok
可以在主服务器 和 备服务器 均写个测试页面,页面内容可以写对应服务器IP;
第一次通过nginx.ys.com 访问 看是否为主服务器,然后停止主服务器的nginx再次访问看是否自动切换为了备用服务器,如果OK 设置成功
注:高可用网站主要用数据库集群服务,这样子数据库出现问题会自动切换主从,然后两个应用服务的数据均为同一个数据库,保证数据一致性。