场景:前端(VUE.js)应用部署在linux服务器,需要支持http和https访问。
问题1:阿里服务器不支持域名访问?
通过域名绑定服务器解决
问题2:如何通过http访问前端
前端通过nginx访问反向代理,在浏览器直接访问。
问题3:如何通过https访问前端
由于通过nginx反向代理是http协议,要支持https协议,需要安装ssl证书
https是基于SSL/TLS协议,使用非对称、对称、hash算法,通过crt证书返回给浏览器
如果申请不成功,参照阿里的配置,在ssl控制台申请ca免费证书
1、生成证书 创建服务器私钥 openssl genrsa -des3 -out server.key 1024 2、创建签名请求的证书(csr); csr核心内容是一个公钥 openssl req -new -key server.key -out server.csr 3、去除使用私钥是的口令验证 cp server.key server.key.org openssl rsa -in server.key.org -out server.key 4、标记证书使用私钥和csr openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
server.crt是我们最终需要的证书
创建完证书之后开始nginx配置
server { listen 443 ssl; server_name web.com.cn; ssl_certificate "/etc/nginx/cert/server.crt"; ssl_certificate_key "/etc/nginx/cert/server.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; location / { proxy_pass http://127.0.0.1/; #转发的IP地址 } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
此配置我用户转发https协议变成http请求
下面配置nginx作为静态服务器使用
server { listen 80 default_server; #listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_set_header Host $host; root 根目录前端应用; index index.html index.html; try_files $uri $uri/ @router; } location @router { rewrite ^.*$ /index.html last; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
到此两个配置完成时候重新加载nginx -s reload
通过浏览器即可访问
server内同时配置反向代理和静态文件的方式 这个是服务器生成
server { listen 443 ssl; server_name 填写域名; ssl_certificate "/etc/nginx/cert/https.crt"; ssl_certificate_key "/etc/nginx/cert/https.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; location /front { proxy_pass http://127.0.0.1:7000/; } location / { proxy_set_header Host $host; root /etc/nginx; #静态文件目录 index index.html index.html; try_files $uri $uri/ @router; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
使用阿里证书
server { listen 443 ssl; server_name 域名; ssl on; ssl_certificate /etc/nginx/cert/2703312_aa.com.cn.pem; ssl_certificate_key /etc/nginx/cert/2703312_aa.com.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; location / { proxy_set_header Host $host; root /opt/dev/aa/aabb; index index.html index.html; try_files $uri $uri/ @router; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
nginx是一个功能非常强大的web服务器常用的三个核心功能是反向代理、负载均衡和静态服务器。
nginx支持的负载均衡调度算法方式如下:
weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包