分类 Nginx 下的文章

Nginx 是前后端开发工程师必须掌握的神器。该神器有很多使用场景:比如反向代理、负载均衡、动静分离、跨域等等。
把 Nginx 下载下来打开 conf 文件夹的 nginx.conf 文件,Nginx 服务器的基础配置和默认的配置都存放于此。

nginx在线配置

配置是让程序员非常头疼的事,比如 Java 后端框架 SSM,大量配置文件让不少人头皮发麻,所以才涌现了 Spring Boot 这样能简化配置的框架。
如果能够采用可视化的方式对 Nginx 进行配置,那该多好,后来在 GitHub 上发现了这款,可以一键生成 Nginx 配置的神器,相当给力
先来看看它都支持什么功能的配置:反向代理、HTTPS、HTTP/2、IPv6, 缓存、WordPress、CDN、Node.js 支持、 Python (Django) 服务器等等

如果你想在线进行配置,只需要打开网站:https://nginxconfig.io/,按照自己的需求进行操作就行了

nginx轻松搞定配置

选择你的场景,填写好参数,系统就会自动生成配置文件。

开源地址:github.com/digitalocean/nginxconfig.io

网站:digitalocean.com/community/tools/nginx

为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

Nginx负载均衡实现的策略有以下五种:

1 .轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

upstream backserver {
server 192.168.0.12;
server 192.168.0.13;
}

2.权重 weight
weight的值越大,分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

权重越高,在被访问的概率越大,如上例,分别是20%,80%。
upstream backserver {
server 192.168.0.12 weight=2;
server 192.168.0.13 weight=8;
} .

3.ip_hash( IP绑定)
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

upstream backserver {
ip_hash;
server 192.168.0.12:88;
server 192.168.0.13:80;
}

4.fair(第三方插件)
必须安装upstream_fair模块。

对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。

哪个服务器的响应速度快,就将请求分配到那个服务器上。
upstream backserver {
server server1;
server server2;
fair;
}

5.url_hash(第三方插件)
必须安装Nginx的hash软件包

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

1.申请免费ssl证书

阿里云,ssl证书,可以申请一个或多个一年的免费证书。
https://common-buy.aliyun.com/?spm=5176.2020520163.cas.1.zTLyhO&commodityCode=cas#/buy

ssl证书申请
点击上方地址的 “证书资源包” 页面去领取免费证书。

免费证书申领

申请后,在域名解析那里,添加一个TXT记录,根据“进度”的提示内容,添加解析记录。添加后就可以下载生成的ngnix证书。

2.部署https证书到nginx

然后到ngnix安装目录下,把证书copy进去,安装阿里云指导文档,配置SSL 443证书。

在原server标签添加如下核心配置:


    #监听443端口
    listen 443;
    #你的域名
    server_name 你的域名;
    
 
    ssl on;
    # ssl证书地址 # pem文件的路径
    ssl_certificate /usr/local/nginx/cert/xxxx.pem;
    # key文件的路径
    ssl_certificate_key /usr/local/nginx/cert/xxxx.key;
    # ssl验证相关配置
    ssl_session_timeout 5m;
    #缓存有效期
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #加密算法
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #安全链接可选的加密协议
    ssl_prefer_server_ciphers on;
 

nginx

使用try_files属性

location / {
  root   /app/web;
  try_files $uri $uri/ @router; #检测文件是否存在不存在则重定向到首页目录    防止404
  index  index.html index.htm;
  #proxy_set_header        Host $host;
  #nginx非80端口处理 加上 :$server_port
   client_max_body_size 10m;
   client_body_buffer_size 128k;
}
location @router {
   rewrite ^.*$ /index.html last;
}

在项目的子路由下刷新页面出现了404,这是因为刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径。
当用户请求 http://localhost/example 时,这里的 $uri 就是 /example。
try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/example(其中 $root 是项目代码安装目录)的文件,就直接把这个文件的内容发送给用户。

Nginx 可以通过with-http_stub_status_module模块来监控nginx的一些状态信息。
1.通过nginx -V来查看是否有with-http_stub_status_module该模块。
nginx status查看状态 handled requests
2.修改nginx.conf,如下:
location /ngx_status {

    stub_status on;
    access_log off;
    #allow 127.0.0.1;允许哪个ip可以访问

}

Active connections: 2 表示Nginx正在处理的活动连接数2个。
server 2 表示Nginx启动到现在共处理了2个连接
accepts 2 表示Nginx启动到现在共成功创建2次握手
handled requests 1 表示总共处理了 1 次请求
Reading:Nginx 读取到客户端的 Header 信息数
Writing:Nginx 返回给客户端 Header 信息数
Waiting:Nginx 已经处理完正在等候下一次请求指令的驻留链接(开启keep-alive的情况下,这个值等于Active-(Reading+Writing))

免责声明
本博客部分内容来自于互联网,不代表作者的观点和立场,如若侵犯到您的权益,请联系[email protected]。我们会在24小时内进行删除。