关于nginx:ServletOutputStream在nginx转发下输出文件下载的一种方法

以前接触到的文件下载基本上都是实时读取的,比方咱们间接将一些服务器端的文件做输入,或是导出一些计算量不太大的excel,所以没有太注意文件下载的细节。 昨天坐了一个数据导出,因为导出的数据量还不算小,而后在导出的过程中还须要做少许的运行,导致下载的时候大概须要5分钟左右。这时候以前没有留神到的细节便浮出了水面。 本次的问题次要呈现在浏览器端未及时弹出文件下载框,这给了用户一种下载页面没法关上的假象。 文件流HTTP在进行连贯时,会接管到响应头与响应主体。依据HTTP协定的形容,响应头与主体间应用空行来分隔。当响应的内容比拟大时,服务器先把响应的内容由上至下的发送给客户端。这更像数据结构中的队列,header头信息发入队,body的主体的信息后入队,而后因为网速的限度,没有方法一次性将队列中的内容全副发送结束,所以在发送时便应用了先进先出的准则,将位于队头的header的信息先发送给客户端。 浏览器做为客户端,接管到http的header头信息后,便能够得悉后盾将发送一个大的文件给咱们,而后弹出保留文件操作的对话框。 弹出文件下载框所以下载大的文件时,如果想让浏览器及时的弹出下载对话框,最要害的就是让浏览器及时的收到相干的header信息。 故以下的代码是谬误的: ServletOutputStream outputStream = httpServletResponse.getOutputStream(); // 设置响应头 httpServletResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"); httpServletResponse.setHeader("Content-Disposition", "attachment;filename=text.xlsx" // 模仿耗时的下载 Thread.sleep(10000); // 发送数据并敞开链接 httpServletResponse.flush(); ➊ httpServletResponse.close();上述代码将导致执行到➊时,浏览器端才可能接管到响应的header信息。也就说是:只有后盾的代码执行到➊时,才会触发浏览器弹出保留文件的对话框。 正确的办法如下: ServletOutputStream outputStream = httpServletResponse.getOutputStream(); // 设置响应头 httpServletResponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"); httpServletResponse.setHeader("Content-Disposition", "attachment;filename=text.xlsx" httpServletResponse.flush(); ➋ // 耗时的下载 Thread.sleep(10000); // 发送数据并敞开链接 httpServletResponse.flush(); httpServletResponse.close();此时代码执行到➋时,浏览器便接管到了必要的header头信息,进而触发其弹出对话框。 本认为曾经高枕无忧,然而用很多老手的话说:浏览器就是不弹出对话框。其实,浏览器不弹出对话框必然是咱们还没有弄明确的,不存在就是一说。咱们在发问时,如果退出了就是,往往阐明本人的心态曾经解体了。 NGINX排除这种就是的问题,往往还须要简化环境,一层层的把一些环境扔掉,看看是否依然报错。通过尝试我发现原来是本人应用nginx反向代理的起因导致header的信息没有被浏览器及时的接管,所以我大胆的猜想应该是nginx做了数据缓存。 因为发送的header的数据量比拟小,而后NGINX出于某些效率的起因,并没有抉择实时地将数据转发给浏览器,这导致了尽管后盾将HEADER头信息发送了进去,但却没有被浏览器接管到,所以浏览器便没有实时的弹出下载的对话框。 有了大略的方向后,通过google查问发现nginx确实默认有缓存性能。而后找到了相应的官网文档中对于proxy_buffer的一节。内容如下: Syntax: proxy_buffering on | off;Default: proxy_buffering on;Context: http, server, locationEnables or disables buffering of responses from the proxied server. When buffering is enabled, nginx receives a response from the proxied server as soon as possible, saving it into the buffers set by the proxy_buffer_size and proxy_buffers directives. If the whole response does not fit into memory, a part of it can be saved to a temporary file on the disk. Writing to temporary files is controlled by the proxy_max_temp_file_size and proxy_temp_file_write_size directives. ...

November 5, 2021 · 2 min · jiezi

关于nginx:Nginx-配置-SSL-非443端口

配置 SSL+端口拜访在生产环境遇到这样一个问题,一个我的项目只给了一台服务器和一个域名,我的项目呢是有3个利用端,有两个前端利用用的是 VUE 开发,所以一个域名就显得不够用了,而且域名是配置了 SSL,前端利用是嵌入到企业微信利用中的,所以不放心用户记不住域名地址,就筹备用 SSL +port 的形式来解决这个问题。以一个非 443 端口和443端口为例进行配置: 443 端口配置server{ listen 80; listen 443 ssl http2; server_name www.domain.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/www.domain.com/; #SSL-START SSL相干配置,请勿删除或批改下一行带正文的404规定 #error_page 404/404.html; #HTTP_TO_HTTPS_START if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END ssl_certificate /www/server/panel/vhost/cert/www.domain.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/www.domain.com/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; error_page 497 https://$host$request_uri; #SSL-END access_log /www/wwwlogs/www.domain.com.log; error_log /www/wwwlogs/www.domain.com.error.log;}非 443 端口配置server{ listen 4000 ssl http2; server_name work.firepa.vip; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/www.domain.com/other-port; #SSL-START SSL相干配置 ssl_certificate /www/server/panel/vhost/cert/www.domain.com/fullchain.pem; ssl_certificate_key /www/server/panel/vhost/cert/www.domain.com/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000"; error_page 497 https://$host$request_uri; #SSL-END access_log /www/wwwlogs/www.domain.com.other.port.log; error_log /www/wwwlogs/www.domain.com.other.port.error.log;}

November 4, 2021 · 1 min · jiezi

关于nginx:关于nginx504超时解决方法

解决过程: 1.查阅材料后,感觉可能是nginx代理超时,将nginx.conf或者vhost中的配置文件中退出设置的代理时长,后果还是没起作用:proxy_connect_timeout 300s;proxy_send_timeout 300s;proxy_read_timeout 300s;send_timeout 300s; 2.最初设置了fastcgi的超时配置,重启nginx.fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;发现还不行 3、查看了django_nginx.conf server {listen 8000;server_name 0.0.0.0;access_log /var/log/nginx/mysite_access.log;error_log /var/log/nginx/mysite_error.log;charset utf-8;keepalive_timeout 65;client_max_body_size 75M;root /data/jenkins/mysite;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:9001;uwsgi_read_timeout 2; #发现这个值比拟小}location /static/ {expires 30d;autoindex on;add_header Cache-Control private;alias /data/jenkins/mysite/static/;} location /media/ {expires 30d;autoindex on;add_header Cache-Control private;alias /data/jenkins/mysite/media/;}} 将此值批改为300后,再次申请,OK了

November 2, 2021 · 1 min · jiezi

关于nginx:Linux-516-稳定版将带来诸多功能更新

最新提交的 DRM-Next 性能更新信息走漏,下一版的 Linux 内核将带来诸多性能更新;围绕 AMDGPU 驱动程序性能的工作正继续推动,打算于新年伊始在 Linux 5.16 稳定版中亮相。其中最引人注意的一个 pr,是 AMD Radeon 内核图形驱动中围绕 DisplayPort 2.0 的初步启用。Linux 5.16 稳定版将带来诸多性能更新Linux 5.16 稳定版将带来诸多性能更新Phoronix 指出,以后一代 Radeon RX 6000 系列显卡最高仅反对到 DisplayPort 1.4,而新版内核驱动程序仿佛正在为将采纳 DisplayPort 2.0 的下一代 GPU 做筹备。随着 Linux 5.16 的推出,在相干初步布局落实后,进一步的工作打算预计也会逐渐上线。 值得注意的是,英特尔的开源 Linux 图形驱动工程师也曾公布了一些补丁,致力于为他们的驱动提供 DisplayPort 2.0 反对。因而在多方致力下,预计 2022 年市场上或者会呈现一些不错的 DP 2.0 采纳。 依据介绍,此次针对 DRM-Next 的 AMDGPU PR 的一些重点内容有: DisplayPort 2.0 的初步反对。更新了最新推出的 Yellow Carp 和 Cyan Skillfish 图形反对Video Core Next(VCN)优先级解决DCN 3.1 节电改良一些其它 Bug 修复和代码更新,包含电源治理/BACO(Bus Active Chip Off) front、RAS 等。残缺补丁列表将于往年 11 月随 Linux 5.16 合并窗口的到来而公布。article.pchome.net/content-2110165.htmlwww.pcpop.com/article/6558658.shtml ...

October 30, 2021 · 1 min · jiezi

关于nginx:Visual-Studio-2022即将发布

微软今日预报了将于 11 月 8 日举办的 Visual Studio 2022 发布会,同时放出了 VS2022 候选公布(RC)与 Preview 5 预览。据悉,VS2022 RC 版本已带有上线许可证,可供感兴趣的开发者们在生产环境中体验,此外微软还 Preview 5 中引入了一些修复和加强。Visual Studio 2022行将公布!Visual Studio 2022行将公布! 以下是 Visual Studio2022 Preview 5 的次要变动: 增加 Xcode 反对。修复我的项目概览页面 / 诊断工具和性能分析器中的面板,在应用某些多显示器配置时可能放大过头的问题。可在 ARM64EC 代码中拜访 x13、x14、x23、x24 和 d16-d31 时收回正告。改良在测试运行中应用热重载进行编辑的反对(增加测试、数据行、类、异步办法等)。

October 26, 2021 · 1 min · jiezi

关于nginx:ubuntu2004-Lets-Encrypt-Nginx-解决网站不受信任

进行操作前请确认nginx曾经装置实现。。。 1,首先装置certbot apt install certbot python3-certbot-nginx2,生成证书 certbot --nginx -d example.com -d www.example.com在执行这一步的时候会让你填写邮箱地址来告诉你续订工夫等平安问题,邮箱自便,而后是一些其余问题 操作胜利最初能够看一下/etc 目录下是否生成了letsencrypt 目录,(这一步可能会有提早,我是等了一会儿才生成进去) 3,配置nginx server { listen 80; server_name www.example.com; #将HTTP 301 重定向到 HTTPS rewrite ^(.*)$ https://$host$1 permanent;}server { listen 443; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; server_name www.example.com; }最初重启nginx 以上文章参考自https://blog.csdn.net/setoy/a...https://www.cnblogs.com/cool-... 感激不尽

October 19, 2021 · 1 min · jiezi

关于nginx:编译nginx1161

cd /home/dev/app/source## 下载压缩包wget http://nginx.org/download/nginx-1.16.1.tar.gz## 下载探活模块git clone https://github.com/yaoweibin/nginx_upstream_check_module.git## 下载 pcre-8.39.zip## 下载 zlib-1.2.8.tar.xz ## 下载 openssl-1.1.0c.tar.gz## 下载会话放弃模块wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz#解压tar zxvf nginx-1.16.1.tar.gzunzip pcre-8.39.ziptar xvf zlib-1.2.8.tar.xztar xvf openssl-1.1.0c.tar.gztar xvzf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tarmv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 nginx-sticky-module## 若应用windows零碎clone nginx_upstream_check_module,而后上传至测试环境,需执行以下命令dos2unix nginx_upstream_check_module/configcd nginx-1.16.1patch -p1 < /home/dev/app/source/nginx_upstream_check_module/check_1.16.1+.patch## 装置目录为 /home/dev/app/build/nginx./configure --prefix=/home/dev/app/build/nginx --with-pcre=/home/dev/app/source/pcre-8.39 --with-zlib=/home/dev/app/source/zlib-1.2.8 --with-openssl=/home/dev/app/source/openssl-1.1.0c --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --add-module=/home/dev/app/source/nginx_upstream_check_module --add-module=/home/dev/app/source/nginx_sticky_module --with-streammake make install## 进入装置好的目录cd /home/dev/app/build/nginx附参数手册--prefix=/app/nginx# 装置目录--conf-path=/app/nginx/conf/nginx.conf# 配置文件--sbin-path=/app/nginx/sbin/nginx# 可执行文件--http-log-path=/app/nginx/logs/access.log# 拜访日志--error-log-path=/app/nginx/logs/error.log# 谬误日志--pid-path=/app/nginx/logs/nginx.pid# pid文件--lock-path=/app/nginx/logs/nginx.lock# lock文件--with-ld-opt=-Wl,-rpath,/usr/local/lib# 设置文件链接参数--with-pcre=/usr/local/src/pcre-8.42# 指定pcre库源码地位--with-zlib=/usr/local/src/zlib-1.2.11# 指定zlib库源码地位--with-openssl=/usr/local/src/openssl-1.0.2n# 指定openssl库源码地位--add-module=/usr/local/src/nginx_upstream_check_module-0.3.0# 反向代理时,如果后端服务器down,nginx不会辨认到,持续发送申请到这台realserver;location中的proxy_next_upstream参数能够解决发送给用户谬误页面,# 但它是先把申请发到这个realserver,而后再转发给别的server,这样就会减少一次转发;nginx_upstream_check_module能够检测后端服务器的状态,# 如果后端服务器出现异常,则申请不会发送到这台服务器。--add-module=/usr/local/src/nginx-sticky-module# 基于cookie实现会话放弃,通过散发和辨认cookie,来使同一个客户端的申请落在同一台服务器上。--add-module=/usr/local/src/nginx-upstream-fair-master# 比内建的负载平衡更加智能的负载平衡模块,目前这个模块曾经进行更新了,nginx1.11版本以上就不再反对。--add-module=/usr/local/src/ngx_cache_purge-2.3# 该模块使得Nginx能够应用PURGE指令手动革除指定URL的缓存页面。--add-module=/usr/local/src/lua-nginx-module-0.10.13# 把 lua 解析器内嵌到 nginx,用来解析并执行lua 语言编写的网页后盾脚本。--add-module=/usr/local/src/ngx_devel_kit-0.3.0# 以一种可用作其余Nginx模块根底的形式扩大Nginx Web服务器的外围性能,它只是为了帮忙缩小Nginx模块开发人员须要编写的代码。--add-module=/usr/local/src/set-misc-nginx-module-0.32# 该模块是规范的HttpRewriteModule指令的扩大,提供更多功能,如URI本义与非本义、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64编码与解码、随机数等--with-http_addition_module# 能够在响应体的后面或前面附加上数据,--with-http_dav_module# 该模块次要是通过WebDAV协定实现文件治理自动化。该模块能够解决HTTP和WebDAV的办法PUT,DELETE,MKCOL,COPY和MOVE。--with-http_flv_module# 该模块为Flash Video文件提供伪流服务器端反对,利用申请URL的查问字符串中的start参数解决申请,通过从申请的字节偏移量开始发送内容,并返回FLV头部。--with-http_gzip_static_module# 该模块容许发送带有.gz文件扩展名的预压缩文件,而不是一般文件。--with-http_realip_module# 获取客户端实在IP。--with-http_stub_status_module# 该模块提供nginx的根本状态信息。--with-http_ssl_module# 反对HTTPS--user=nginx# 设置用户--group=nginx# 设置组

October 19, 2021 · 1 min · jiezi

关于nginx:用小鸟云服务器如何实现Nginx静态资源配置

nginx中怎么配置动态资源,置信很多没有教训的人对此大刀阔斧。在前后端拆散的我的项目中,为了减少前端页面的响应速度,咱们能够将前端的相干资源,例如html,js,css或者图片等放到nginx指定的目录下,拜访的时候只须要通过IP或者域名加门路就能够实现拜访,部署动态我的项目也一样。 1、在配置文件中增加动态规定目录:/nginx/con/nginx.conflocation /img/ {    alias /user/local/img/;} 这里,/img/是指拜访的规定,/user/local/img/ 是动态文件寄存在服务器上的门路。当拜访的url中带有/img/时,ng会主动在服务器/user/local/img/目录下查找对应的资源。 2、重启nginx使规定失效在/nginx/sbin目录下应用命令重启nginx./nginx -s reload

October 15, 2021 · 1 min · jiezi

关于nginx:基于-Nginx-实现灰度发布与-AB-测试

背景单位的云办公相干零碎没有成熟的平滑公布计划,导致每一次公布都是间接公布,dll文件或配置文件的变更会引起站点的重启。 云办公零碎的常驻用户有10000+,即便短短半分多钟,也会收到一堆投诉。基于此,咱们梳理了一套平滑公布的计划。 实施方案1、跟nginx代理服务器约定了一个健康检查的接口 2、通过接口返回的http状态码来让ngx是否分流用户申请(这个咱们单位的技术部那边有规范的做法) 3、依据提供的这个服务健康检查的接口:nginx判断只有某个实例的接口返回5xx的状态码,即把该实例下线(nginx不会把流量转发到该实例) 公布流程目标次要是为了公布的时候可能平滑公布,所以QA与开发人员在公布得时候依照如下步骤操作: 1、关上零碎的nginx列表治理页面:[/publish/ngxconfig] 2、下架某一个实例(假如零碎集群有A、B、C个实例),比方A实例 3、查看是否下架胜利:这个就是咱们跟nginx约定的健康检查接口,失常在线状态下是200的statu,切离线后,这个接口返回的是401的statu。 在线状况: 离线状况: 4、察看监控站点,直至该实例下的Req、Connnectiuon流量都隐没 5、在该实例下进行版本公布 6、关上Fidller,host到待发布的实例,而后判断是否公布胜利(公布dll、配置文件时,IIS站点会短暂重启) 7、QA同学走查灰度的A实例服务器,保障它失常运行,如此循环,直到所有服务器都公布。 进一步AB测试的优化平滑公布做完之后,的确给我带来很大的便当,不必每次公布都发布告,不重要的或者非功能性的内容公布了就是了。 然而用久了,客户量下来之后,又遇到一个问题,那就是每一次业务大变更,大型公布都是间接公布到生产,这样可能存在危险。设计师设计的性能,用户不肯定齐全承受,一旦上线新版本,收到一大堆的吐槽,都是用户呀,如果能在小范畴人群内进行灰度试用,实现安稳的适度和应用反馈之后,优化后再上到生产会更好一点。 所以这边须要思考和设计一套对立的技术计划,将来无论云办公还是其余的业务零碎,都能通过灰度公布在可指定的小范畴内先进行体验和性能验证。 基于下面的平滑,咱们在Nginx反向代理服务器上动心理,让nginx来帮咱们做ABTesting的计划。 以下是咱们尝试的几种计划1、Nginx反向代理:去路IP策略流程图: 步骤: 1、进入云办公零碎,进入Nginx反代服务器2、Nginx读取去路IP的AB名单3、依据IP AB名单进行流量转发(名单A走特定实例,名单B走云办公原有集群实例)server {listen 80;server_name officecloud.com;access_log officecloud.com/logs main;ip_list 192.168.254.4,192.168.254.170set $group default;if ($remote_addr in iplist) {set $group ACluster;}location / { proxy_pass http://$group;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;index index.html index.htm;}}优缺点: 1、配置简略,原资源平台的灰度降级就是依据IP名单来划分设计降级的2、内部计算机很多都是非固定IP,这个适宜在公司内网实现,比方只是配置公司内网的IP。2、Nginx反向代理:$.Cookies策略流程图: 步骤 1、进入云办公零碎,进入Nginx反代服务器2、Nginx读取Http申请的Cokie的version信息(也能够是别的key)3、依据Key的版本来进行流量转发(比方Version1.1走特定集群,Version1.0走通用集群实例)server {listen 80;server_name officecloud.com;access_log officecloud.com/logs main;ip_list 192.168.254.4,192.168.254.170set $group default;if ($http_cookie ~* "version=V1.0"){set default;}if ($http_cookie ~* "version=V1.1"){set $group ACluster;}location / { proxy_pass http://$group;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;index index.html index.htm;}}优缺点: ...

October 9, 2021 · 1 min · jiezi

关于nginx:Nginx调优gzip的相关设置

问题:公司我的项目在开发一项3D全景性能时,须要用到threejs这个框架进行3D渲染,个别3D文件的大小都在40M以上,这次咱们渲染的文件在44M左右,下载所破费的工夫是80s。 以前的解决办法:急躁劝告产品经理,这是失常景象,这么大文件必定要这么多秒,别急啊,又不是加载不进去,你看,这不是加载进去了吗? 当初的解决办法:文件这么大,是否能够压缩后再传输?这里就引出nginx gzip的概念,gzip分为两种压缩模式:1、实时压缩,通过耗费cpu来实时压缩文件并返回给浏览器,该形式下响应头中Etag属性会有’W\’的字样,开启形式在nginx.conf中增加gzip on等属性即可。2、动态文件压缩,这种形式须要提前将文件压缩成.gz文件,nginx在加载文件时会优先应用.gz文件,而不是实时压缩中的自行压缩形式,开启形式在nginx.conf中增加gzip_static on等属性,这里nginx中不自带gzip_static模块,须要编译并增加,此外须要在vue我的项目打包过程中配置gzip ->bingo胜利 具体的具体参数设置详见 vue 我的项目开启gzip压缩和部署 vue我的项目开启Gzip压缩和性能优化 - guopengju - 博客园 成果:44Msize的ifc文件被压缩成8M,加载工夫从80秒,降为12秒 此外,js、css、json等动态资源文件都失去了加载晋升 Respect! 未来的解决办法:请大家把更好的办法留在评论区!!! 衍生proxy_cache缓存出发点:在做完下面gzip压缩后,大文件的传输问题根本得以解决,于是想进一步提高加载速度,动态资源在首次加载后,会产生memory cache和disk cache两种缓存,然而这类缓存都属于客户端缓存,换句话说,当另外一个用户拜访网站时,他也是须要从新再加载一遍,针对此类问题,思考是否能够有服务端缓存,于是有了proxy_cache的想法:用法很简略,各类博客都有说到:https://blog.csdn.net/qq_3172...本人感觉重要的点:1、proxy_cache的设置须要在proxy_pass的前提下,要不然有效2、add_header Nginx-Cache $upstream_cache_status; 原来响应头中缓存是否中的属性是能够自定义。3、这种缓存我分为两种状况:(1)对后端响应的数据做缓存,能够将申请到的后果缓存下来,效果显著,然而弊病是针对实时性要求高的接口做缓存,在事实中不可取,还是得就地取材吧。(2)动态资源做缓存(不能间接增加proxy_cache,须要做一层代理转发):教程 https://www.jb51.net/article/...成果不显著,然而通过剖析他人的CDN资源,都有做缓存,是否真的有用后续再察看。

October 8, 2021 · 1 min · jiezi

关于nginx:Nginx学习三

1、罕用nginx常用命令在nginx部署目录:/home/admin/soft/nginx/sbin/下 查看 nginx 版本号 ./nginx -v启动 nginx./nginx查看是否启动胜利:ps -ef|grep nginx进行 nginx./nginx -s stop从新加载 nginxv./nginx -s reload查看版本号nginx -v查看配置文件是否有误nginx –t2、nginx 日志配置不失效的问题log_format 有个默认的日志格局: log_format combined '$remote_addr - $remote_user [$time_local] ' ' "$request" $status $body_bytes_sent ' ' "$http_referer" "$http_user_agent" ';nginx 默认调用 combined 格局来记录日志,即默认调用:(默认记录在access.log文件中) access_log logs/access.log combined;nginx容许自定义日志格局,例如: log_format main '$remote_addr - $remote_user [$time_local] "$http_host" "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for $request_time';以上是自定义了日志格局:main(main名称能够自定义)要想使其失效,就必须用access_log指定调用: access_log logs/xx.log main;否则,nginx依然会去调用combined格局来记录日志。留神,http段也必须明确指定调用main格局才会失效,否则还是会调用默认的combined格局。 3、打印自定义headernginx.conf log_format accesslog '$http_x_forwarded_for`$remote_addr`$proxy_add_x_forwarded_for`[$time_local]`"$request"`' '$status`$body_bytes_sent`"$http_referer"`' '"$http_user_agent"`"$request_time"`' '$request_id`$upstream_response_time`$upstream_addr`$upstream_connect_time`$upstream_status';在自定义的conf/web.conf 中配置nginx 的server ...

September 29, 2021 · 1 min · jiezi

关于nginx:Nginx学习二

1、proxy_set_header1.1、$http_host与$host区别1、在应用Nginx做反向代理的时候,proxy_set_header性能能够设置反向代理后的http header中的host,那么罕用的几个设置中$proxy_host, $host,$http_host又都示意什么意思呢?Nginx的官网文档中说上面这两条是做反代时默认的,所以$proxy_host 天然是 proxy_pass前面跟着的host了 proxy_set_header Host $proxy_host;proxy_set_header Connection close;如果客户端发过来的申请的header中有’HOST’这个字段时,$http_host和$host都是原始的’HOST’字段比方申请的时候HOST的值是www.csdn.net 那么反代后还是www.csdn.ne 1.1.1、 不设置 proxy_set_header Host 时浏览器间接拜访 nginx,获取到的 Host 是 proxy_pass 前面的值,即 $proxy_host 的值,参考 http://nginx.org/en/docs/http... server { listen 8090; server_name _; location / { proxy_pass http://172.31.5.0:5000; }} 1.1.2、 设置 proxy_set_header Host $host 时浏览器间接拜访 nginx,获取到的 Host 是 $host 的值,没有端口信息 server { listen 8090; server_name _; location / { proxy_set_header Host $host; proxy_pass http://172.31.5.0:5000; }} 1.1.3、2.3 设置 proxy_set_header Host $host:$proxy_port 时浏览器间接拜访 nginx,获取到的 Host 是 $host:$proxy_port 的值 ...

September 29, 2021 · 2 min · jiezi

关于nginx:使用Nginx部署VUE项目Centos服务器

NginxNginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:)开发的,第一个公开版本0.1.0公布于2004年10月4日。其将源代码以类BSD许可证的模式公布,因它的稳定性、丰盛的功能集、简略的配置文件和低系统资源的耗费而闻名。2011年6月1日,nginx 1.0.4公布。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协定下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中体现较好,中国大陆应用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 怎么将vue我的项目部署到nginx呢?首先我应用的是阿里云服务器Centos零碎 零碎中先装置好nginx我之前有写过centos装置nginx能够看看https://segmentfault.com/a/11... 查看nginx是否装置命令nginx -v 部署vue我的项目前提得有域名以及域名ssl证书(这样子就能够间接拿域名去拜访vue我的项目以及是https的)再部署vue我的项目之前得建设个文件夹用来寄存vue我的项目和方便管理 能够像这个样子 一会咱们的vue我的项目寄存到adminvue文件夹中方便管理和查找应用 接下来就是vue我的项目打包npm run build vue我的项目目录下会呈现dist文件夹 接下来能够把dist外面的所有货色放到方才创立的adminvue文件夹中,能够应用Xftp 间接复制进去就行。 接下来就是配置nginx来拜访咱们的vue我的项目了 server{ server_name 域名; rewrite ^(.*)$ https://${server_name}$1 permanent;}server { listen 443 ssl; server_name 域名; ssl_certificate /etc/nginx/conf.d/域名ssl证书pem文件; ssl_certificate_key /etc/nginx/conf.d/域名ssl证书key文件; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; location / { root vue我的项目门路; index index.html index.htm; }}而后在应用命令启动nginx 个别默认门路/usr/local/nginx/sbin 查看版本./nginx -V 敞开nginx./nginx -s stop 开启nginx./nginx 从新加载nginx./nginx -s reload nginx配置文件/usr/local/nginx/conf/nginx.conf ...

September 29, 2021 · 1 min · jiezi

关于nginx:nginx增加自定义账号鉴权

nginx减少自定义账号鉴权应用nginx反向代理实现当一个站点外部程序是个黑盒(无奈批改外面的申请逻辑),如何减少本人的账号零碎鉴权 实现逻辑应用nginx的反向代理性能自定义账号零碎减少两个接口,一个页面(为防止门路抵触,减少了"/xuxiaocong",依据本人需要批改) 账号接口:POST "/xuxiaocong/login",接管用户名和明码,输出正确则生成token鉴权接口:GET "/xuxiaocong/auth",读取cookie中的token,验证其有效性,无效返回200状态码,有效返回401状态码登录页面:GET "/xuxiaocong/login",登录页面,填写用户名和明码,将token写入cookie成果用户拜访站点触发/auth鉴权,token有效时,跳转自定义登录页面登录胜利后刷新页面,进入源站点当token生效时,会从新弹出登录页面如果源站点也有本人的账号,则须要输出两个账号密码,双重认证demo目录构造root # 根目录 static # 动态文件(flask框架) xuxiaocong axios.min.jsaxios.min.maptemplates # 页面(flask框架) login.html # 登录页面main.pyrequirements.txtnginx配置代理时减少鉴权(验证cookie)无权限时跳转ATP的login页面验证胜利后cookie记录token,跳转回原页面因为原页面可能会有门路抵触,将门路命名为"/xuxiaocong"这样比拟拗口的门路理论我的项目门路中可减少guid等形式升高反复可能所有合乎设置的门路都须要鉴权(调用/xuxiaocong/auth接口),肯定留神接口的高性能server { listen 80; listen [::]:80; server_name localhost; location / { # 这里做演示,所有申请都须要鉴权,理论我的项目留神过滤条件 proxy_pass http://www.damengsanqian.com/; # 代理须要鉴权的站点 proxy_set_header X-Original-URI $request_uri; auth_request /xuxiaocong/auth; # 鉴权接口 error_page 401 /xuxiaocong/login; # 401跳转登录页面 } # 门路代理 location /xuxiaocong { proxy_pass http://localhost:5000/xuxiaocong; auth_request off; # 该门路禁用鉴权 } # 动态文件门路代理(flask框架限度) location /static/xuxiaocong { proxy_pass http://localhost:5000/static/xuxiaocong; auth_request off; # 该门路禁用鉴权 } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}代码(Python)结尾所说的两个接口一个页面,用其余语言实现 ...

September 28, 2021 · 2 min · jiezi

关于nginx:Nginx-缓存机制详解非常详细实用

Nginx 缓存作为性能优化的一个重要伎俩,能够极大加重后端服务器的负载。上面咱们将介绍 Nginx 缓存配置的相干指令以及 http 缓存机制,以及 Nginx 缓存实际案例剖析。 Nginx 缓存示例实例演示,缓存是怎么呈现的,怎么查看! 当咱们代开某个网站,如 baidu.com,咱们能够看到 size 这一列有一些 js 标识为 disk cache,这里就是利用到了缓存。 HTTP 缓存机制HTTP 的缓存流程如下图所示 缓存,能够分为强制缓存和比照缓存。 Nginx 强制缓存介绍强制缓存是什么?以及可能造成这个起因的配置参数! 浏览器不会向服务器发送任何申请,间接从本地缓存中读取缓存数据并返回 200 状态码,如下图所示。如果缓存过期再找服务器,其过程如下: 能够造成强制缓存的字段,有如下几个: Expires地位: HTTP Response Header 阐明: Expires 是服务端返回的到期工夫。如果下一次申请如果小于服务端返回的过期工夫,则间接应用缓存数据。Expires 是 HTTP1.0 的货色,当初浏览器默认都是应用 HTTP1.1。而且因为该值是有服务端生成,而客户端的工夫和服务端的工夫有可能不统一,导致存在肯定误差。所以 HTTP1.1 应用 Cache-Control 代替。 # 示例Expires: Mon, 22 Jul 2019 11:08:59 GMTCache-Control地位: HTTP Response Header 阐明: 缓存策略定义 max-age: 标识资源可能被缓存的最大工夫public: 示意该响应任何中间人,包含客户端和代理服务器都能够缓存private: 示意该响应只能用于浏览器公有缓存中,中间人(代理服务器)不能缓存此响应no-cache: 须要应用比照缓存(Last-Modified/If-Modified-Since/Etag/If-None-Match)来验证缓存数据no-store: 所有内容都不会缓存,强制缓存和比照缓存都不会触发Nginx 比照缓存介绍应用缓存和不应用缓存的区别和比照! ...

September 28, 2021 · 2 min · jiezi

关于nginx:如何解决Ubuntu提示没有找到ifconfig命令

在咱们新装置的Ubuntu 20.04操作系统中,咱们想要查看ip地址,发现应用ifconfig命令,提醒找不到这个命令。在上面文章汇总,会介绍如何装置这个工具。当在运行ifconfig命令是,提醒上面的谬误,就代表没有装置它: bob@ubuntu-20-04:~$ ifconfig Command 'ifconfig' not found, but can be installed with: sudo apt install net-tools或者提醒上面的信息: -bash: ifconfig: command not found在Ubuntu 20.04中,不倡议应用ifconfig命令。这就是为什么会收到无关短少的ifconfig命令的谬误的起因。若想要查看ip地址。能够应用ip addr命令,它简直能够执行与ifconfig命令雷同的工作,如上面的代码所示: bob@ubuntu-20-04:~$ ip addr1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:40:d4:6f brd ff:ff:ff:ff:ff:ffinet 192.168.43.174/24 brd 192.168.43.255 scope global dynamic noprefixroute ens33 valid_lft 1337sec preferred_lft 1337secinet6 fe80::7559:c488:6787:289d/64 scope link noprefixroute valid_lft forever preferred_lft forever如何解决Ubuntu提醒没有找到ifconfig命令如何解决Ubuntu提醒没有找到ifconfig命令从下面代码输入中能够看到,该命令仍将显示所有网络接口的IP地址和其余统计信息。 ...

September 23, 2021 · 1 min · jiezi

关于nginx:Nginx学习一

Nginx学习(一)1、Nginx 应用场景动态资源服务,通过本地文件系统提供服务;反向代理服务,延长出包含缓存、负载平衡等;API 服务,OpenResty2、概念2.1、简略申请和非简略申请1、简略申请同时满足上面两个条件1)申请办法是 HEAD、GET、POST 三种之一;2)HTTP 头信息不超过左边着几个字段:Accept、Accept-Language、Content-Language、Last-Event-IDContent-Type 只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain; 2、非简略申请不同时满足上述两个条件的 3、浏览器解决简略申请和非简略申请的形式1)简略申请对于简略申请,浏览器会在头信息中减少 Origin 字段后间接收回,Origin 字段用来阐明,本次申请来自的哪个源(协定+域名+端口)。如果服务器发现 Origin 指定的源不在许可范畴内,服务器会返回一个失常的 HTTP 回应,浏览器取到回应之后发现回应的头信息中没有蕴含 Access-Control-Allow-Origin 字段,就抛出一个谬误给 XHR 的 error 事件;如果服务器发现 Origin 指定的域名在许可范畴内,服务器返回的响应会多出几个 Access-Control- 结尾的头信息字段。2)非简略申请非简略申请是那种对服务器有特殊要求的申请,比方申请办法是 PUT 或 DELETE,或 Content-Type 值为 application/json。浏览器会在正式通信之前,发送一次 HTTP 预检 OPTIONS 申请,先询问服务器,以后网页所在的域名是否在服务器的许可名单之中,以及能够应用哪些 HTTP 申请办法和头信息字段。只有失去必定回答,浏览器才会收回正式的 XHR 申请,否则报错。 2.2跨域1、跨域概念在浏览器上以后拜访的网站向另一个网站发送申请获取数据的过程 2、跨域作用跨域:浏览器的同源策略决定的,是一个重要的浏览器安全策略,用于限度一个 origin 的文档或者它加载的脚本与另一个源的资源进行交互,它可能帮忙阻隔歹意文档,缩小可能被攻打的媒介,能够应用 CORS 配置解除这个限度。 同源定义:如果两个 URL 的 protocol、port (en-US) (如果有指定的话)和 host 都雷同的话,则这两个 URL 是同源。这个计划也被称为“协定/主机/端口元组”,或者间接是 “元组”。(“元组” 是指一组我的项目形成的整体,双重/三重/四重/五重/等的通用模式)。 例子: 2.3、正向代理和反向代理个别给客户端做代理的都是正向代理,给服务器做代理的就是反向代理。 2.4、负载平衡负载平衡,外围是「摊派压力」。Nginx 实现负载平衡,一般来说指的是将申请转发给服务器集群。 2.5、动静拆散因为 Nginx 的高并发和动态资源缓存等个性,常常将动态资源部署在 Nginx 上。如果申请的是动态资源,间接到动态资源目录获取资源,如果是动静资源的申请,则利用反向代理的原理,把申请转发给对应后盾利用去解决,从而实现动静拆散。应用前后端拆散后,能够很大水平晋升动态资源的访问速度,即便动静服务不可用,动态资源的拜访也不会受到影响。 ...

September 18, 2021 · 2 min · jiezi

关于nginx:刘建Nginx配置SSL

Nginx配置SSLAuthor: Abbott Liu(刘建) Create: 2021/09/18 5:50 Update: 2021/09/18 5:50 在咱们下载的证书文件中有一个Nginx的文件夹,这外面的两个文件都是须要的。咱们须要把这个两个文件上传到 linux 服务器中,举荐放到/etc/ssl/目录下 而后咱们须要去找到nginx的配置文件。 ps -ef | grep nginx 能够看到nginx的目录是/usr/local/nginx 那么咱们须要找到 nginx.conf文件并批改 cd /usr/local/nginx/confvim nginx.conf配置文件内容 http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name edj365.com; rewrite ^/(.*)$ https://edj365.com:443/$1 permanent; #charset koi8-r; #access_log logs/host.access.log main; location / { root 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 html; } } # http节点中能够增加多个server节点 server { #监听443端口 listen 443 ssl; #对应的域名,把edj365.com改成你们本人的域名就能够了 server_name edj365.com; #从腾讯云获取到的第一个文件的全门路 ssl_certificate cert/edj365.com.pem; #将domain name.pem替换成您证书的文件名。 ssl_certificate_key cert/edj365.com.key; #将domain name.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; #这是我的主页拜访地址,因为应用的是动态的html网页,所以间接应用location就能够实现了。 location / { #文件夹 root /usr/local/nginx/html; #主页文件 index index.html; } }}/usr/local/nginx/sbin/nginx ...

September 18, 2021 · 1 min · jiezi

关于nginx:误删nginxconf文件如何恢复

当你不小心误删或者错误操作导致nginx.conf文件失落,而且nginx处于在住运行的状态,在这种状况下咱们就能够在内存中获取配置文件 1.获取nginx 过程pid执行 ps aux | grep nginx你会失去如下输入,找到master的pid [root@VM-8-3-centos /]# ps aux | grep nginxroot 6958 0.0 0.0 112812 968 pts/0 R+ 09:10 0:00 grep --color=auto nginxroot 19193 0.0 0.3 109440 6360 ? Ss Jun08 0:00 nginx: master process nginxroot 22326 0.0 0.3 112200 7412 ? S 01:47 0:01 nginx: worker process如上所示,nginx的次要过程pid为19193 2.查找内存映射接下来咱们须要查看过程正在应用哪些内存映射 sudo cat /proc/19193/maps | grep heap[root@VM-8-3-centos /]# sudo cat /proc/19193/maps | grep heap5581bf774000-5581bf8b7000 rw-p 00000000 00:00 0 [heap]5581bf8b7000-5581bfa50000 rw-p 00000000 00:00 0 [heap]能够看到有2处中央,咱们只须要关注heap局部。内存位于5581bf774000-5581bf8b7000和5581bf8b7000-5581bfa50000之间。 ...

September 16, 2021 · 1 min · jiezi

关于nginx:国密Nginx容器实战

国密Nginx容器实战1.背景 目前国密SSL(TLCP)曾经逐渐开始推广并理论应用,国密SSL实验室(www.gmssl.cn)提供了国密版OpenSSL,并且能够与Nginx集成,能够比拟不便的搭建国密SSL反向代理或者国密SSL服务器。 国密SSL实验室并没有提供Docker的样例,思考到Docker的广泛性,本文形容了在Docker外面部署国密SSL的Nginx的的残缺构建过程,仅供学习和参考之用。 运行环境为Centos7 X86_64。 2.装置docker#装置docker 17.03.0 #装置docker依赖三个yum源:Base,Extras,docker-ce[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[root@localhost ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#从新生成yum缓存[root@localhost ~]# yum clean all[root@localhost ~]# yum makecache#装置docker所需依赖包[root@localhost ~]# yum -y install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm#装置docker[root@localhost ~]# yum -y install docker-ce-17.03.0.ce-1.el7.centos3.配置镜像减速[root@localhost ~]# mkdir /etc/docker[root@localhost ~]# cat > /etc/docker/daemon.json<<EOF> {> "registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"]> }> EOF[root@localhost ~]# systemctl enable --now docker4.筹备容器环境#拉取centos镜像[root@localhost ~]# docker pull centos:centos7.9.2009#运行容器[root@localhost ~]# docker run -itd --name nginx centos:centos7.9.2009 [root@localhost ~]# docker exec -it nginx /bin/bash[root@308fdeaaa058 /]# yum -y install wget gcc make pcre-devel[root@308fdeaaa058 ~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz[root@308fdeaaa058 ~]# tar xf nginx-1.20.1.tar.gz5.编译nginx下载gmssl_openssl_1.1_b4.tar.gz与nginx(参见资源与下载),而后编译。 ...

September 14, 2021 · 3 min · jiezi

关于nginx:Nginx-proxysetheader设置

nginx代理罕用配置项 server { listen 80; server_name localhost; location /test119 { 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_pass http://192.168.4.120:80; }通过以下的案例来了解proxy_set_header设置 其中backend 192.168.4.122 提前装置nginx 第三方模块反对 ""echo" =============192.168.4.119 proxy1 nginx.conf server { listen 80; server_name localhost; location /test119 { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.4.120:80; }=============192.168.4.120 proxy2 nginx.conf server { listen 80; server_name localhost; location /test { proxy_pass http://192.168.4.121:80; }=============192.168.4.121 proxy3 nginx.conf server { listen 80; server_name localhost; location /test { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.4.122:80; }=============192.168.4.122 backend nginx.conf ...

September 9, 2021 · 1 min · jiezi

关于nginx:nginx配置禁特定路径下的反向代理

近期因为我的项目须要再一次配置了nginx 这次的的需要设计到字符串解决 须要把<域名或ip>/xhr_api/结尾的申请转发到内网某机器,同时移除掉xhr_api,这里间接记录下后果,配置非常简单 location ~ ^/(xhr\_api/)(.*)$ { # return 200 "$1,$2,$3"; #$2是被括号包起来的内容 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_http_version 1.1; proxy_set_header Connection ""; # 不须要思考到负载的,就无需配置upstream节点。 proxy_pass http://127.0.0.1:5678/$2;# 这里$2后面的/是因为`^/(xhr\_api/)(.*)$`正则曾经匹配了`/` 所以取不到`/`在这里补上了 proxy_redirect off;}nginx配置禁特定门路下的反向代理nginx配置禁止拜访目录或禁止拜访目录下的文件nginx跨域解决带你深刻理解nginx根本登录认证(蕴含配置步骤)

September 8, 2021 · 1 min · jiezi

关于nginx:nginx配置禁止访问目录或禁止访问目录下的文件

某些网站零碎须要用户上传图片等文件到某些目录下,不免程序有些破绽,导致用户上传了php、cgi等等可执行的文件,导致网站陷入十分尴尬的地步. 此时咱们能够通过nginx来禁止用户拜访这些目录下的可执行文件。如果不禁止,nginx会间接去下载web目录下文件,如果有配置文件,并能够间接裸露一些配置文件源代码。测试时要清理浏览器缓存,浏览器会缓存下载的文件。如果有相似配置文件,倡议不要放在web目录下,会更加平安。 <!-- more --> 禁止拜访特定后缀文件location ~ \.(php|jsp|txt)$ { deny all;}禁止拜访某个目录下的php后缀文件location /directory { location ~ .*\.(php)?$ { deny all; }}禁止拜访多个目录下的php后缀文件location ~* ^/(directory1|directory2)/.*\.(php)${ deny all;}禁止拜访目录或目录下文件#禁止拜访目录location ^~ /test/ { deny all;}#禁止拜访目录下文件location ^~ /test { deny all;}nginx location的匹配语法= 示意准确匹配 ^~ 示意uri以某个字符串结尾 ~ 正则匹配(辨别大小写) ~ 正则匹配(不辨别大小写) !~和!~别离为辨别大小写不匹配及不辨别大小写不匹配的正则 / 任何申请都会匹配 匹配优先级: = > ^~ > / nginx配置禁特定门路下的反向代理nginx配置禁止拜访目录或禁止拜访目录下的文件nginx跨域解决带你深刻理解nginx根本登录认证(蕴含配置步骤)

September 8, 2021 · 1 min · jiezi

关于nginx:jenkins的nginx反向代理配置

有时为了方便使用,并且不对外裸露太多端口,咱们须要对服务器的一些服务进行反向代理 jenkins的nginx反向代理配置能够参考如下内容 location / { proxy_pass http://127.0.0.1:8080; proxy_redirect off; 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 X-Forwarded-Proto $scheme;}无关jenkins的自动化配置看这里无关jenkins的tty问题看这里无关jenkins的反向代理配置看这里无关jenkins的java11问题看这里无关jenkins的私钥格局谬误问题看这里无关jenkins的webhooks配置看这里

September 6, 2021 · 1 min · jiezi

关于nginx:在Linux中如何查看文件的修改日期

有时候可能须要查看无关文件的详细信息,例如文件的批改日期。当你要查看文件的最初编辑工夫时,本文可能会派上用场。在本文将学习4种办法查看文件的批改日期。应用stat命令stat命令能够显示文件属性的详细信息,比方最近一次拜访和批改文件的工夫、文件大小等信息,应用起来比较简单,命令前面只须要加上文件名就能够: [root@localhost ~]# stat hello_script.sh File: ‘hello_script.sh’ Size: 31 Blocks: 8 IO Block: 4096 regular fileDevice: fd00h/64768d Inode: 67169379 Links: 1Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)Context: unconfined_u:object_r:admin_home_t:s0Access: 2020-10-15 19:13:24.628009932 +0800Modify: 2020-10-15 19:07:18.266426499 +0800Change: 2020-10-15 19:11:48.227856412 +0800 Birth: -在Linux中如何查看文件的批改日期在Linux中如何查看文件的批改日期从下面的输入中,咱们能够看到文件的拜访日期、文件的批改日期、文件权限的批改日期以及其余参数。 如果只心愿查看文件的批改日期,而不思考所有其余信息,运行以下命令: [root@localhost ~]# stat -c %y hello_script.sh 2020-10-15 19:07:18.266426499 +0800在Linux中如何查看文件的批改日期在Linux中如何查看文件的批改日期-c选项用于指定自定义格局代替默认的输入,而'%y'标记显示上次批改工夫。对于文件夹,语法放弃不变。只需将文件名替换为文件夹名称即可。 应用date命令date命令的用法是显示以后日期。然而当与-r选项一起应用时,能够显示文件的最初批改日期,如下所示: [root@localhost ~]# date -r hello_script.sh Thu Oct 15 19:07:18 CST 2020在Linux中如何查看文件的批改日期在Linux中如何查看文件的批改日期 应用ls -l命令ls -l命令通常用于应用长列表显示无关文件的其余信息,例如文件权限和所有者,大小和创立日期。能够增加-t选项,这样就能够依照文件的批改工夫来排列: [root@localhost ~]# ls -lt或者[root@localhost ~]# ll -t ...

September 6, 2021 · 1 min · jiezi

关于nginx:Nginx反向代理之巨坑underscoresinheaders

一、背景因为我的项目需要,在做Windows的相干的事件;根本架构就是Nginx--> Nginx --> IIS,在Linux机器上通过Nginx做反向代理到Windows的IIS;而后遇到的问题间接应用IIS的IP拜访是没有任何问题的;只有通过Nginx的反向代理总会有局部会报错;报错具体如下: 1)外表谬误 Server Error, unsaved changes may have been lost, please reload the page before you continue.2)浏览器查看报错 3)应用层的具体日志报错如下 <error errorId="fe8491dc-8dd1-49f2-8339-1dc3863b2280" host="aaaaaa" type="System.Web.Mvc.HttpAntiForgeryException" message="The required anti-forgery form field &quot;__RequestVerificationToken&quot; is not present." source="System.Web.WebPages" detail="System.Web.Mvc.HttpAntiForgeryException (0x80004005): The required anti-forgery form field &quot;__RequestVerificationToken&quot; is not present.&#xD;&#xA; at System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext, IIdentity identity, AntiForgeryToken sessionToken, AntiForgeryToken fieldToken)&#xD;&#xA; at System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext, String cookieToken, String formToken)&#xD;&#xA; at SunGard.AvantGard.Web.Infrastructure.AntiForgeryHelper.Validate()&#xD;&#xA; at SunGard.AvantGard.Web.Infrastructure.UseAntiForgeryTokenOnPostByDefault.OnActionExecuting(ActionExecutingContext filterContext)&#xD;&#xA; at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.InvokeActionMethodFilterAsynchronouslyRecursive(Int32 filterIndex)&#xD;&#xA; at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.InvokeActionMethodFilterAsynchronouslyRecursive(Int32 filterIndex)&#xD;&#xA; at System.Web.Mvc.Async.AsyncControllerActionInvoker.&lt;&gt;c__DisplayClass7_0.&lt;BeginInvokeActionMethodWithFilters&gt;b__0(AsyncCallback asyncCallback, Object asyncState)&#xD;&#xA; at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)&#xD;&#xA; at System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters, AsyncCallback callback, Object state)&#xD;&#xA; at System.Web.Mvc.Async.AsyncControllerActionInvoker.&lt;&gt;c__DisplayClass3_1.&lt;BeginInvokeAction&gt;b__0(AsyncCallback asyncCallback, Object asyncState)" user="aaaaaa" time="2021-09-03T09:56:15.1925032Z" statusCode="500">二、排查过程1)间接应用IP行,加上Nginx的代理就是不行,阐明必定是Nginx的哪些配置有问题 ...

September 5, 2021 · 1 min · jiezi

关于nginx:Nginx部署前端vue后端express项目步骤细节

我的项目前端应用vue画页面、后端应用express写接口。部署我的项目之前,要做好筹备工作。要把前端的vue我的项目npm run build打包生成一个dist文件夹,同时也要把nginx装置好。咱们接着往下浏览步骤:第一步首先找到nginx装置的目录,而后批改nginx的服务配置文件,是在nginx装置目录里的conf文件夹中的nginx.conf这个文件,咱们应用vscode关上,并加上一个serve{}配置咱们所须要的反向代理,接下来就是写对应nginx配置代码了 第二步咱们比拟喜爱 5678这个数字,于是咱们就把本人电脑上的 5678这个端口凋谢给用户应用。即:咱们应用nginx这个工具(哨兵)监听本机的5678这个端口,当有用户来拜访这个端口的时候,咱们就给到相应的反馈。所以对应nginx代码:listen 5678 第三步假如咱们电脑的ip是10.9.26.121,因为咱们用本人的电脑当做服务器部署我的项目。 所以对应nginx代码: server_name 10.9.26.121 第四步当用户拜访咱们的ip端口时,即:用户拜访:10.9.26.121:5678的时候,因为哨兵工具nginx在时时刻刻监听监督这个ip端口。所以nginx收到ip端口的拜访申请时,就会把申请转发到,或者说定位location到咱们前端vue我的项目打包好的dist文件中去。dist文件夹中的寄存的是咱们写好的前端页面代码,代码解析执行,用户即可看到前端页面。因为程序执行须要找到对应的文件代码地位,所以root就是对应前端打包代码dist寄存的地位。至于dist入口,必定是index.html不需赘述。对应nginx代码如下: location / { root D:/nginx-1.18.0/html/personManage/dist; index index.html; }比方上述的root是,我把vue打包的dist文件放在电脑D磁盘中的这个目录地位D:/nginx-1.18.0/html/personManage/dist 然而留神,这里有一个坑:如果咱们间接在文件地址栏复制dist文件地址地位,复制的后果是不对的。如下图这样的错误操作: 咱们最终复制到的是这样的地址:D:\nginx-1.18.0\html\personManage,如果咱们间接把这个地址放在root前面,运行nginx当前,会显示500 Internal Server Error,因为这里是去文件夹外面找程序代码,所以须要用正斜杠/,这样的话nginx能力辨认,即,解决方案为:批改成:D:/nginx-1.18.0/html/personManage/dist(毕竟windows喜爱用反斜杠\,然而Nginx只应用正斜杠/)第五步又因为,前端vue我的项目中ajax交互跨域解决方案应用的是vue.config.js中的devServer中proxy代理,所以nginx中还须要一个location去解决,前端跨域申请转发的问题,所以proxy中的跨域转发前缀要和nginx中的跨域转发前缀保持一致,页面接口交互能力失常实现。图示如下: 最终nginx代码# personManage我的项目 history路由模式server { listen 5678; # 给用户应用5678端口并监听 server_name 10.9.26.121; # 本机服务器ip地址为:10.9.26.121 client_max_body_size 100m; # 上传大文件的配置,nginx默认20M容量,想要上传更大文件,就要额定设置 location / { # 定位具体的文件入口 try_files $uri $uri/ /index.html; # 解决vue中history路由模式,部署后刷新页面404问题,hash路由模式则不须要 root D:/nginx-1.18.0/html/personManage/dist; # 前端代码dist文件所在磁盘目录地位 index index.html; # dist文件夹中的入口文件index.html } location /api/ { # 解决前端跨域转发申请 # 咱们后端express服务启用的端口是9999,所以这里就转发到这个地址 proxy_pass http://10.9.26.121:9999/; # 上面三句话是用来获取用户拜访的ip的 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; }}后端express启用的是9999端口,代码:app.listen(9999, (req,res) => { console.log('后端服务端口地址为:localhost://9999') } )第六步因为后端咱们应用的是node中的express框架,不是java中的springboot框架什么的,不须要打一个jav包,咱们只须要在express中应用pm2插件去治理咱们的后端我的项目即可。 ...

September 3, 2021 · 1 min · jiezi

关于nginx:nginx-emerg-duplicate-listen-options-for-0000443-错误

明天提交一个零碎到测试服,测试服php版本7.2,laravel的8.0要7.3以上,测试服我的项目太多,还有很多很古老的我的项目,不好轻易降级,就打算放到一个不太重要的我的项目机器上,他俩共用一台机器,那个php版本比拟高 操作是间接建设好公布零碎,更新代码到新服务器 而后解析域名,copy一个nginx配置进去,批改下域名、门路和日志,重启时报nginx for 0.0.0.0:443 谬误,nginx: [emerg] duplicate listen options for 0.0.0.0:443 in /nginx/conf.d/xxx.com.conf:3 查了下:大略是说反复的选项,那哪里反复了呢? default_server,间接copy的第一个站点,第二个批改时也有default_server 很显著,只能有一个默认服务器 如果存在default_server参数,将使服务器成为指定地址:端口对的默认服务器。 而后还说,listen指令能够具备特定于与套接字相干的零碎调用的几个附加参数。它们能够在任何监听指令中指定,但对于给定地址:端口对只能指定一次。 所以,应删除第二站站点的default,尝试后问题解决 参考一原文地址:https://github.com/alibaba/te... 参考示例:第一个server { listen 443 ssl http2 fastopen=3; server_name www.example.me;能够放弃不变 或者 保险能够加个default, 改成server { listen 443 default ssl http2 fastopen=3; server_name www.example.me;前面所有的 listen 443 ssl 把 ssl 局部删了, 只有 listen 443 就行server { listen 443;试试这样可不可以, 我没来工夫测试参考二原文地址:http://mailman.nginx.org/pipe... Socket can't be in ssl mode for some servers and in non-ssl for others, so there is no need to specify "ssl" argument for non-default servers. I.e. this will work with ssl in both servers:server { listen 443 default ssl; ...}server { listen 443; ...}In your first configuration nginx was able to detect that you used meaningless "ssl" argument in second server and complained. In second configuration it wasn't able to detect meaningless "ssl on;" statement. This is the only difference.Maxim Dounin

September 1, 2021 · 1 min · jiezi

关于nginx:nginx集群配置实践及使用jmeter单节点和集群测试对比

1.nginx集群配置 应用upstream配置tomcat服务器IP和端口,如果server只有一个,则nginx的作用相当于一个反向代理服务器,如果server是多个,则相当于nginx配置集群。 如图,当申请通过99端口时,在location中应用proxy_pass会将申请调配到配置的upstream中,从而达到了集群或反向代理的成果。 2.集群配置实现后,应用jmeter对单节点和集群进行压力测试 因为自己只有一台腾讯云的1G2核的云服务器,所以集群是把tomcat部署在同一个服务器的不同端口进行测试,测试后果可能与失常不同服务器的tomcat作为集群有所出入。 jmeter两个测试计划(别离是单节点和集群测试)均模仿20个用户的并发数来进行测试。因为在压测过程中,发现线程有时候会卡死,导致测试不能失常进行,所以在http申请中退出了10000ms的超时(也能够配置jmeter的运行内存大小来解决),保障线程不会卡死。 3.比照压测后果上方为单节点的压测后果,下方为集群的压测后果。 着重查看两边的异样率,单节点的异样率为9.75%,集群的异样率为8.2%,显然集群的性能比单节点的性能较好。 失常状况下,集群能实现1 + 1 >2的成果(2核4G + 2核4G > 4核8G)。另外,异样率如果超过某个临界点比方20%,则阐明以后服务器的性能达到瓶颈,须要对服务器进行扩容或者硬件的降级,能力满足更高的并发成果。

August 30, 2021 · 1 min · jiezi

关于nginx:bt面板安装邮局系统

前些日子阿里云优惠就顺便买了个服务器,明天想在阿里云的服务器上试着装置一个邮件服务,忽然发现之前装置的好好的邮件服务插件不能失常装置了,始终报错。 点击该链接享受本文章的污浊无广告版 查看了下出错的中央,提醒没有back_file这个属性,并且通知了我文件门路,那接下来的内容就轻松了,去看下这个函数做了什么,看名字大概率是备份一下文件,本人手动备份一下,而后把问题修复掉。 看得出来确实是备份一下文件,那么本人提前备份好,而后正文掉就好了。代码文件的门路在/www/server/panel/plugin/mail_sys/mail_server_init.py 不出意外又呈现了新的谬误,这次的报错内容仿佛是拿不到redis的明码,我这个面板没有装redis,当初补上redis。 终于呈现了校验页面了,提醒我改下主机名以及配置redis明码,好说,配上就行了。 当初好了,邮件服务装置好了,依照流程配置好域名解析。而后到webmail中配置域名domain。 登进去后试着发邮件,居然还是发不了,去到阿里云服务器上一看,好家伙,默认禁止25端口,这下没辙了。 然而并没有完结 我还是尝试了一下465端口的发送办法,不过不管怎么配置,都始终无奈正确发送邮件,百度谷歌能查到的相干材料也比拟少,临时作罢。

August 29, 2021 · 1 min · jiezi

关于nginx:轻松让你的nginx服务器支持HTTP2协议

简介nginx是一个高效的web服务器,因为其独特的响应解决机制和低内存耗费,深得大家的青睐,并且nginx可和多种协定配合应用,而HTTP2协定又是一个十分优良的协定,如果将两者联合起来会产生意想不到的成果,明天咱们将会解说如何在nginx中配置HTTP2协定。 HTTP1.1和HTTP2HTTP的全称是Hypertext Transfer Protocol,是在1989年World Wide Web倒退起来之后呈现的标准协议,用来在WWW上传输数据。HTTP/1.1是1997年在原始的HTTP协定根底上进行的补充和优化。 到了2015年,为了适应疾速发送的web利用和古代浏览器的需要,倒退出了新的HTTP/2协定,次要在手机浏览器、延时解决、图像处理和视频解决方面进行了优化。 绝对于HTTP1.1来说,HTTP2有如下几个长处: 应用多路复用技术,在同一个连贯中能够并行处理多个申请。能够压缩HTTP头,缩小申请的大小。数据传输格局是以二进制进行的,所以传输更加无效。服务器能够向客户端推送数据,从而让应用程序能够解决更加简单的性能。只管HTTP2并不要求应用加密,然而对于古代浏览器来说如Google Chrome 和 Mozilla Firefox默认HTTP2和HTTPS是一起应用的,所以如果你想配置HTTP2的话,还是须要同时配置SSL。装置最新的nginx在写本文的时候,nginx最新的版本是1.21.1。咱们能够从nginx官网上下载对应的编译好的文件,间接解压即可运行。或者能够下载它的源文件,手动进行编译装置。 如果你是在mac环境,能够间接应用brew命令来进行装置: brew install nginx装置结束之后会通知咱们一些有用的信息: Docroot is: /usr/local/var/wwwThe default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so thatnginx can run without sudo.nginx will load all files in /usr/local/etc/nginx/servers/.To have launchd start nginx now and restart at login: brew services start nginxOr, if you don't want/need a background service you can just run: nginx这里就不一一具体解说了,感兴趣的敌人能够自行摸索。 开启HTTP2反对从下面能够晓得,nginx默认的配置文件是/usr/local/etc/nginx/nginx.conf,关上该文件能够看到最初一行: include servers/*;所以咱们能够在servers中新建一个www.flydean.com.conf的文件作为明天要开启HTTP2反对的域名。 ...

August 28, 2021 · 2 min · jiezi

关于nginx:面试官Nginx-如何实现高并发常见的优化手段有哪些

这是一位读者带回来的面试题Nginx 是如何实现并发的?为什么 Nginx 不应用多线程?Nginx常见的优化伎俩有哪些?502谬误可能起因有哪些? 面试官心理剖析次要是看应聘人员的对NGINX的基本原理是否相熟,因为大多数人多多少少都懂点NGINX,然而真正其明确原理的可能少之又少。明确其原理,能力做优化,否则只能照样搬样,出了问题也无从下手。 面试题:Nginx 是如何实现高并发?常见的优化伎俩有哪些?懂皮毛的人,个别会做个 Web Server,搭建一个 Web 站点;高级运维可能搞个 HTTPS 、配置一个反向代理; 中级运维定义个 upstream、写个正则判断;老鸟做个性能优化、写个ACL,还有可能改改源码(小编示意没有改源码的能力)。 面试题分析Nginx 是如何实现高并发的?异步,非阻塞,应用了epoll 和大量的底层代码优化。 如果一个server采纳一个过程负责一个request的形式,那么过程数就是并发数。失常状况下,会有很多过程始终在期待中。 而nginx采纳一个master过程,多个woker过程的模式。 master过程次要负责收集、散发申请。每当一个申请过去时,master就拉起一个worker过程负责解决这个申请。同时master过程也负责监控woker的状态,保障高可靠性woker过程个别设置为跟cpu外围数统一。nginx的woker过程在同一时间能够解决的申请数只受内存限度,能够解决多个申请。Nginx 的异步非阻塞工作形式正把当中的等待时间利用起来了。在须要期待的时候,这些过程就闲暇进去待命了,因而体现为少数几个过程就解决了大量的并发问题。 每进来一个request,会有一个worker过程去解决。但不是全程的解决,解决到什么水平呢?解决到可能产生阻塞的中央,比方向上游(后端)服务器转发request,并期待申请返回。那么,这个解决的worker很聪慧,他会在发送完申请后,注册一个事件:“如果upstream返回了,通知我一声,我再接着干”。于是他就劳动去了。 此时,如果再有request 进来,他就能够很快再按这种形式解决。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。 为什么 Nginx 不应用多线程?Apache: 创立多个过程或线程,而每个过程或线程都会为其调配 cpu 和内存(线程要比过程小的多,所以worker反对比perfork高的并发),并发过大会耗光服务器资源。 Nginx: 采纳单线程来异步非阻塞解决申请(管理员能够配置Nginx主过程的工作过程的数量)(epoll),不会为每个申请调配cpu和内存资源,节俭了大量资源,同时也缩小了大量的CPU的上下文切换。所以才使得Nginx反对更高的并发。 Nginx常见的优化配置有哪些? 1)调整worker_processes指Nginx要生成的worker数量,最佳实际是每个CPU运行1个工作过程。 理解零碎中的CPU外围数,输出 $ grep processor / proc / cpuinfo | wc -l2)最大化worker_connectionsNginx Web服务器能够同时提供服务的客户端数。与worker_processes联合应用时,取得每秒能够服务的最大客户端数 最大客户端数/秒=工作过程*工作者连接数 为了最大化Nginx的全副后劲,应将工作者连贯设置为外围一次能够运行的容许的最大过程数1024。 3)启用Gzip压缩压缩文件大小,缩小了客户端http的传输带宽,因而进步了页面加载速度 倡议的gzip配置示例如下:( 在http局部内) 4)为动态文件启用缓存为动态文件启用缓存,以缩小带宽并进步性能,能够增加上面的命令,限定计算机缓存网页的动态文件: location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {expires 365d;}5)Timeoutskeepalive连贯缩小了关上和敞开连贯所需的CPU和网络开销,获得最佳性能须要调整的变量可参考: 6)禁用access_logs拜访日志记录,它记录每个nginx申请,因而耗费了大量CPU资源,从而升高了nginx性能。 齐全禁用拜访日志记录 access_log off;如果必须具备拜访日志记录,则启用拜访日志缓冲 access_log /var/log/nginx/access.log主缓冲区= 16k502报错可能起因有哪些? 1)FastCGI过程是否曾经启动2)FastCGI worker过程数是否不够3)FastCGI执行工夫过长4)FastCGI Buffer不够nginx和apache一样,有前端缓冲限度,能够调整缓冲参数 ...

August 23, 2021 · 1 min · jiezi

关于nginx:不止折腾使用安卓手机搭建Web服务

(不止折腾)应用安卓手机搭建Web服务前文Android零碎是基于Linux,因而能够在Android零碎的手机上应用一些Linux的个性,不过没法间接用,必须借助非凡的程序,这个程序就是Terminal(终端模拟器)。 笔者最开始接触手机上的Terminal(终端)还是在高中时候,那时候热衷于刷机,有过刷机经验的同学应该都知道,晚期的Android手机平安机制没有像当初这么简单,刷机老本相对来说比拟低,并且过后的手机配置比拟低(我记得过后用过的一款手机内存是512M,而当初的一款旗舰手机内存曾经达到了惊人的12G,这在过后是不敢设想的),大家个别厌弃自带的零碎,感觉太过臃肿,所以手机的各种第三刷机包异样沉闷,大家也能通过刷机体验到其余不同格调的零碎。刷机的时候须要用第三方的recovery把手机自带的替换掉,这个操作通常是在电脑上用adb工具输出命令行替换的,然而过后因为除了网吧很难接触到电脑,才另辟蹊径,发现能够在手机上实现这一操作,这个工具就是超级终端(我记得过后如同是叫这个名吧,也有叫安卓终端模拟器的),不过过后也就止步于此了,没有做更多的钻研。 Termux现在时过境迁,再次接触到安卓上的终端,是一款叫Termux的开源软件,上面是他官网的介绍 Termux之所以在泛滥的终端模拟器中怀才不遇,次要是基于其良好的生态,集成busybox(相当于是打补丁,补救一些Android绝对于Linux没有的命令),自带包管理工具,并且移植了大部分在Linux发行版上罕用的软件,这使得咱们可能开箱即用。 介绍结束,上面咱们就筹备用Termux来搞一些骚操作。对于Termux一些具体的介绍以及入门操作,我这边就不再反复了,在文章的最初面会给大家推一个博客,能够算是中文对于Termux的博客中最具体的了,当然博客自身内容品质也很高。 PS:大家如果对这篇文章感兴趣,想本人去装置Termux,最好是间接去Google Play下载,这应该是最不会出问题的渠道,如果没法上Google Play,能够返回酷安社区,在该软件的下方评论区会有热心观众给出解决方案nginx1.装置nginx pkg install nginx2.启动nginx nginx2.浏览器查看 关上浏览器,输出127.0.0.1:8080(Termux没有应用1024以下端口的权限,所以nginx默认的端口是8080) 此时跟你手机在同一个局域网内的设施同样可能拜访这个网页,在Termux中输出ifconfig就能够查看你手机的局域网IP,而后再在电脑上浏览器关上 目前这个网站还仅仅局限于你本人的手机和局域网,如果我想让更多的人拜访该怎么办,这就须要用到上面的工具了,内网穿透。 注意事项:在最新版的termux中不再须要装置proot来应用nginxFrp内网穿透frp 是一个专一于内网穿透的高性能的反向代理利用,反对 TCP、UDP、HTTP、HTTPS 等多种协定。能够将内网服务以平安、便捷的形式通过具备公网 IP 节点的直达裸露到公网。 之所以抉择Frp作为内网穿透的工具,次要是起因是Frp是国人开发的,文档浏览没有阻碍,并且他的配置非常简单,官网略微看下文档就能够上手了,还有就是尽管Frp比较简单,然而性能并不低。Frp分为服务端Frps以及客户端Frpc,以下就间接把服务端简称为Frps,客户端简称为Frpc。Frps须要部署在一台领有公网的服务器上,Frpc部署的机器只有能联网就能够了(能连通Frps)。 1.装置Frps、Frpc 间接到Frp的releases页面进行下载即可 一般来说Frps须要用x64的版本,也就是下面的frp_0.37.1_linux_amd64.tar.gz,Frpc须要用arm64的版本,也就是下面的frp_0.37.1_linux_arm64.tar.gz,不分明本人的机器的在机器上输出uname -m进行查看(aarch64就是arm64)。下载实现后别离进行解压 2.Frps配置文件 进入解压后的文件夹,编辑frps.ini [common]# Frps服务的端口bind_port = 7000# Frps暴露出的http端口,能够被nginx代理(前面会讲到)vhost_http_port = 8080# 本人设计一串字符做tokentoken = 12345678903.Frpc配置文件 进入解压后的文件夹,编辑frpc.ini [common]# Frps的地址server_addr = 127.0.0.1# Frps的端口server_port = 7000# token(与Frps填写的统一)token = 1234567890# web服务的名字随便[web_test]# 类型是httptype = http# http服务绑定的ip(个别都是127.0.0.1)local_ip = 127.0.0.1# http服务绑定的端口local_port = 8080# 这个http服务通过哪个域名进行拜访(服务端通过拜访的域名将申请指向指定的frpc客户端)custom_domains = xikcloud.com4.启动Frps、Frpc ./frps -c ./frps.ini./frpc -c ./frpc.ini如果不须要https,当初就曾经能够失常进行拜访了(域名解析弄好,域名解析到Frps的公网ip),例如我绑定的是xikcloud.com,当初就能够输出xikcloud.com:8080进行拜访了 ...

August 20, 2021 · 1 min · jiezi

关于nginx:手把手教你10分钟在树莓派安装Nginx并部署页面乛乛

核心思想:部署页面乛乛 FIRST 在树莓派上装置Nginx1.为什么要装Nginx?咱们不是要部署页面么?那么问题来了,为啥要用Nginx,或者说,Nginx无能啥?nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server。nginx [engine x] 是一个 HTTP 和反向代理服务器、一个邮件代理服务器和一个通用的 TCP/UDP 代理服务器。 ---摘自nginx官网 现阶段咱们常常用到反向代理。 那么问题又来了,反向代理是个啥?proxy 反向代理工具:随着开发越来越偏差的前后端拆散,咱们在开发中不可避免地会碰到跨域的问题。proxy 就能够完满解决反向代理的问题,作为 webpack-dev-server 的主打性能之一, proxy 能够帮忙咱们代理到任何服务器,解决开发中碰到的跨域问题。 ---摘自antd-pro老手须知局部 tips:留神这里的proxy反向代理工具只能解决“开发者环境”中遇到的跨域问题,将我的项目打包后部署时的跨域问题并没有解决-----应用Nginx解决乛乛 那么问题又来了,跨域问题是什么?怎么产生的?跨域的起源是浏览器同源策略的限度。浏览器为了平安,会限度不同源(两个协定名,域名,端口号都雷同的url才是同源)之间的DOM,数据,网络操作。 说得那么简单,简略一点Nginx相当于一个跳板机,客户端的域名也是Nginx的域名。所以客户端首先拜访Nginx服务器,而后Nginx又把申请转发给服务器。当响应返回的时候又返回给客户端。 其中反向代理最重要的局部便是:匹配+转发 oK,准备常识筹备地差不多了,上面开始装置吧实际会让你记住你本来记不住的货色乛乛 1 装置Nginx装置Nginx之前,先装置一些依赖详情请见Nginx在linux上装置之前的筹备工作(1)装置gcc g++的依赖库 sudo apt-get install build-essentialsudo apt-get install libtool(2)装置pcre依赖库 sudo apt-get updatesudo apt-get install libpcre3 libpcre3-dev(3)装置zlib依赖库 apt-get install zlib1g-dev(4)装置ssl依赖库 apt-get install openssl(5)装置Nginx sudo apt-get install nginx装置实现之后,在浏览器输出服务器的IP地址,呈现以下画面阐明Nginx装置胜利 Second 部署页面装置实现之后理解下nginx的装置地位(每个版本都可能存在差别) whereis nginx其中/usr/sbin/nginx 为执行指令所在位置;/etc/nginx 为nginx配置文件所在位置;(1)如何部署页面进入/etc/nginx 文件夹,咱们重点关注sites-available和sites-enabled翻译过去就是【能够启用的站点】和【曾经启用的站点】应用FTP工具登录到服务器之后能够看到 sites-enabled 上面默认有一个default,然而下面有一个相似快捷方式的图标,实际上这是一个软链接,链接的文件在 sites-available中 ...

August 19, 2021 · 1 min · jiezi

关于nginx:CentOS服务器中下载nginx

应用阿里云服务器下载nginx进入nginx页面下载https://nginx.org/ 个别最好抉择稳固版本 装置依赖 能够通过工具 Winscp,把下载好的 nginx-1.17.9.tar.gz 上传到服务器跟目录,再解压 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel 也能够下载lrzsz,间接将压缩包拖进服务器yum -y install lrzsz 解压命令tar -zxvf nginx-1.20.1.tar.gz 而后进入到nginx文件当中进行编译cd nginx-1.20.1./configuremake && make install 默认装置地位/usr/local/nginx 进入到sbin外面运行nginx./nginx 查看nginx运行状况ps -ef | grep nginx 拜访服务器IP会呈现nginx

August 17, 2021 · 1 min · jiezi

关于nginx:Docker下Nginx实现WebSocketSSL反向代理

问题背景:开发网页利用大部分基于 http 协定,在应用一些额定性能波及隐衷平安,譬如视频、音频传输会须要通过 https 建设链接。在不对原有的网页架构进行更改的前提下,须要通过 Nginx 对客户端发动的 https 申请进行代理,客户端与 Nginx 服务器之前通信应用 WebSocket + SSL,Nginx 服务与服务器之间应用 WebSocket 进行通信。 一、Docker 环境装置curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun二、Nginx 镜像包导出,以及载入docker pull nginx:mainline-alpine-perldocker save e310e1d4a8bb -o /home/nginx.tar //存储镜像为tar包docker load -i nginx.tar //转移jar包,从新载入docker run --name nginx -d -p 8010:8010 -p 8011:8011 -p 433:433 nginx:mainline-alpine-perl --restart always //restart = ‘always’ 参数指定服务是否自启动docker run --name nginx -d -p 8010:8010 -p 8011:8011 -p 433:433 nginx //运行nginx镜像并建设端口映射三、nginx.conf 文件、目录挂载无挂载目录docker stop nginxfind / -name nginx.confcd /XXX/XXX/XXX/ //find命令所查找的门路名称vim nginx.confdocker start nginx挂载目录docker exec -it nginx /bin/bash //进入容器外部docker run --name nginx -d -p 8090:80 -p 443:443 -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf.d:/etc/nginx/conf.d -v /home/ssl:/home nginx //挂载目录,批改对应目录下的文件即可四、证书生成(解决自签名证书有效)chrome验证证书很严格,必须带有Subject Alternative Name. ...

August 6, 2021 · 2 min · jiezi

关于nginx:一文带你了解Nginx

1. 概述很多人可能或多或少理解过nginx,即便没有应用过nginx,然而可能用Apache搭建过简略的web服务器,用tomcat写过一些简略的动静页面,其实这些性能nginx都能够实现。 nginx最重要的三个应用场景集体认为是动态资源服务、反向代理服务和api服务。 web申请走进服务当前会先通过nginx再到应用服务,而后再去拜访redis或者mysql提供根本的数据性能。 这就有个问题,应用服务因为要求开发效率高,所以他的运行效率是很低的,他的qbs,tps并发都是受限的,所以就须要把很多的应用服务组成集群,向用户提供高可用性。 很多服务形成集群的时候,须要nginx具备反向代理的性能,能够把动静申请传导给对应的应用服务。服务集群肯定会带来两个需要,动静的扩容和容灾。 反向代理必须具备负载平衡的性能,其次在链路中,nginx是处在企业内网的边缘节点,随着网络链路的增长,用户体验到的时延会减少。 把一些所有用户看起来不变的,或者在一段时间内看起来不变的动静内容缓存在nginx局部,由nginx间接向用户提供拜访,用户的时延就会缩小很多。 反向代理衍生出另外的性能叫缓存,他可能减速拜访,而很多时候在拜访像css或js文件又或者一些小图片是没有必要由应用服务来拜访的,他只须要间接由nginx提供拜访就能够了这就是nginx的动态资源性能。 应用服务它自身的性能有很大的问题,数据库服务要比应用服务好的多,起因是数据库他的业务场景比较简单,并发性能和tps都要远高于应用服务。由nginx间接去拜访数据库或者redis也是不错的抉择。 还能够利用nginx弱小的并发性能,实现如web防火墙的一些业务性能,这就要求nginx服务有十分弱小的业务解决性能,openResty和nginx集成了一些工具库来实现此性能。 2. 历史背景全球化和物联网的疾速倒退,导致接入互联网中的人与设施的数量都在疾速的回升,数据的疾速爆炸,对硬件性能提出很高的要求。 摩尔定律表明之前服务跑在1GHZ的CPU上的服务更新到2GHZ的CPU时服务会有两倍的性能晋升。 然而到了本世纪初,摩尔定律在单颗CPU的频率上曾经生效了,CPU开始向着多核方向倒退,当服务器当初是跑在8核CPU上时,一年半当前换到了16核的CPU,服务的性能通常是不会有一倍的晋升的。 这些性能次要损耗在操作系统和大量的软件没有做好服务于多核架构的筹备,比如说像Apache是低效的,因为他的架构模型里一个过程同一时间,只会解决一个连贯,一个申请。只有在这个申请解决完当前才会去解决下一个申请。 它实际上在应用操作系统的过程间切换的个性,因为操作系统宏观上是无限的CPU,然而操作系统被设计为同时服务于数百甚至上千的过程。 Apache一个过程只能服务于一个连贯,这种模式会导致当Apache须要面对几十万,几百万连贯的时候,他没有方法去开几百万的过程,而过程间切换的代价老本又太高啦。 当并发的连接数越多,这种无谓的过程间切换引发的性能耗费又会越大。 nginx是专门为了这种利用场景而生的,能够解决数百万甚至上千万的并发连贯,nginx目前在web市场份额中排行第二,在过来几年他增长极度迅速,在不久的未来nginx在web端的利用将远远超过其余服务器。 3. nginx的长处大部分的程序和服务器随着并发连接数的回升他的RPS数会急剧的降落,这里的原理就像之前所说过的,他的设计架构是有问题的。 nginx的第一个长处就是高并发和高性能同时具备的,往往高并发只须要对每一个连贯所应用的内存尽量的少就能够达到。 而具备高并发的同时达到高性能,往往须要十分好的设计,那nginx能够达到什么样的规范呢? 比如说当初支流的一些服务器32核64G的内存能够轻松达到数千万的并发链接,如果是解决一些简略的动态资源申请,能够达到一百万的RPS这种级别。 其次nginx的可扩展性十分好,次要在于他的模块化设计十分的稳固,而且nginx的第三方模块的生态圈十分的丰盛。甚至于有像TNG,openRestry这种第三方插件。丰盛的生态圈为nginx丰盛的性能提供了保障。 第三个长处是它的高可靠性,所谓的高可靠性是指nginx能够在服务器上继续不间断的运行数年,而很多web服务器往往运行几周或者几个月就须要做一次重启。 对于nginx这种高并发高性能的反向代理服务器而言,他往往运行在企业内网的边缘节点上,如果企业想提供4个9,5个9,甚至更高的高可用性时,对于nginx继续运行可能down机的工夫一年可能只能以秒来计。所以在这种角色中,nginx的高可靠性给提供了十分好的保障。 第四个长处热部署,是指能够在不进行服务的状况下降级nginx,这对于nginx来说十分的重要,因为在nginx可能跑了数百万的并发连贯。 如果是一般的服务可能只需kill掉过程再重启的形式就能够解决好,然而对于nginx而言,因为kill掉nginx过程,会导致操作系统为所有的曾经建设连贯的客户端发送一个tcp中的reset报文。而很多客户端是没有方法很好的解决申请的。 在大并发场景下,一些偶尔事件就会导致必然的恶性后果,所以热部署是十分有必要的。 第五个长处是BSD许可证,BSD Listens是指nginx不仅是开源的收费的,而且能够在有定制须要的场景下,去批改nginx源代码,再运行在商业场景下,这是非法的。 以上的长处是nginx最外围的个性。 4. 次要组成部分首先是nginx的可执行文件,它是由nginx本身的框架、官网模块以及各种第三方模块独特构建的文件。他有残缺的零碎,所有的性能都由他提供。 第二个局部是nginx.conf配置文件,相似于骑车的驾驶员,尽管可执行文件曾经提供了许多性能,但这些性能有没有开启,或者开启了当前定义了怎么的行为解决申请,都是由nginx.conf配置文件决定的。 nginx的第三个组成部分叫做access.log拜访日志,access.log会记录下每一条nginx解决过的http申请信息与响应信息。 第四个组成部分是error.log谬误日志,当呈现了一些不可预期的问题时,能够通过error.log去把问题定位进去。 这四个局部是相辅相成的。 nginx的可执行文件和nginx.conf定义了解决申请的形式。如果想对web服务,做一些经营或者运维的剖析,须要对access.log做进一步的剖析。如果呈现了任何未知的谬误,或者与预期的行为不统一时,应该通过error.log去定位根本性的问题。 5. 版本规定nginx每公布一个版本的时候会有三个个性,一个是feature,就是他新增了哪些性能,bugfix示意他修复了哪些bug,change示意做了哪些重构。 每一个版本都有mainline骨干版本和stable稳固版本。 在nginx的官网点击右下角的download,就能够看到版本号列表,复数版本示意骨干版本,会新增很多性能,但不肯定稳固。单数版本是稳固版本。 CHANGES文件中能够看到每一个版本含有的新增性能,修复的bug,以及做了哪些小的重构。 大略在2009年当前nginx的bugfix数量曾经大幅度缩小,所以nginx绝对曾经很稳固了。 nginx的开发工夫是在2002年,然而他在2004年10月4日推出了第一个版本,在2005年已经做过一次大的重构。 因为nginx优良的设计,使得他的生态圈极为丰盛,模块的设计,架构的设计都没有再做过大的变动。 在2009年nginx开始反对windows操作系统,2011年1.0正式版本公布,同时nginx的商业公司nginx Plus也成立了,在2015年nginx公布了几个重要的性能。 其中提供stream,四层反向代理,他在性能上齐全能够代替传统应用的LVS, 并且具备更丰盛的性能。 6. 版本抉择收费开源: nginx.org 商业版本: nginx.com 开源收费的nginx在2002年开始开发,到2004年公布第一个版本,2011年开源版的nginx公布了1.0稳定版,同年nginx的作者成立了一家商业公司,开始推出nginx Plus商业版的nginx。 商业版的nginx在整合第三方模块上还有经营监控以及技术支持上有很多长处,但他有个最大的毛病就是不开源,所以通常在国内会应用nginx.org开源版的。 阿里巴巴也推出了Tengine版本,Tengine的长处就是在阿里巴巴生态下他经验了十分严苛的考验,Tengine之所以会存在也是因为他的很多个性当先于nginx的官网版本。 所以Tengine实际上是批改了nginx官网版本的骨干代码,当然框架被批改当前Tengine就遇到了一个显著的问题,没有方法跟着nginx的官网版本同步的降级。Tengine也能够应用nginx的第三方模块。 OpenResty的作者章亦春在阿里巴巴的时候开发了Lua语言版本的openResty,因为nginx的第三方模块开发的难度相当大,章亦春把nginx非阻塞事件的一种框架以Lua语言的形式提供给了宽广开发者。 OenRestry兼具了高性能,以及开发效率高的特点,OpenResty同样有开源版和商业版,目前多应用openresty.org站点下的开源版本。商业版OpenRestry的次要特点是技术支持绝对比拟好很多。 如果你没有太多的业务诉求,那么应用开源版的nginx就足够了,如果你须要开发Api服务器,或者须要开发web防火墙,openrestry是一个很好的抉择。 7. 编译配置装置nginx有两种办法,除了编译外,还能够间接用操作系统上自带的一些工具,比如说yum,apt-get,间接去装置nginx。 然而间接装置nginx有个问题,就是nginx的二进制文件不会把模块间接编译进来,毕竟nginx的官网模块,并不是每一个默认都会开启的。 ...

August 2, 2021 · 4 min · jiezi

关于nginx:彻底搞懂-Nginx-五大应用场景出去吹牛逼再也不担心了

一:HTTP服务器Nginx自身也是一个动态资源的服务器,当只有动态资源的时候,就能够应用Nginx来做服务器,如果一个网站只是动态页面的话,那么就能够通过这种形式来实现部署。 1、首先在文档根目录 Docroot(/usr/local/var/www)下创立html目录, 而后在html中放一个test.html; 2、配置nginx.conf中的serveruser mengday staff;http { server { listen 80; server_name localhost; client_max_body_size 1024M; # 默认location location / { root /usr/local/var/www/html; index index.html index.htm; } }}3、拜访测试http://localhost/ 指向/usr/local/var/www/index.html, index.html是装置nginx自带的htmlhttp://localhost/test.html 指向/usr/local/var/www/html/test.html留神:如果拜访图片呈现403 Forbidden谬误,可能是因为nginx.conf 的第一行user配置不对,默认是#user nobody;是正文的,linux下改成user root; macos下改成user 用户名 所在组; 而后从新加载配置文件或者重启,再试一下就能够了, 用户名能够通过who am i 命令来查看。 4、指令简介server : 用于定义服务,http中能够有多个server块listen : 指定服务器侦听申请的IP地址和端口,如果省略地址,服务器将侦听所有地址,如果省略端口,则应用规范端口server_name : 服务名称,用于配置域名location : 用于配置映射门路uri对应的配置,一个server中能够有多个location, location前面跟一个uri,能够是一个正则表达式, / 示意匹配任意门路, 当客户端拜访的门路满足这个uri时就会执行location块外面的代码root : 根门路,当拜访http://localhost/test.html,“/test.html”会匹配到”/”uri, 找到root为/usr/local/var/www/html,用户拜访的资源物理地址=root + uri = /usr/local/var/www/html + /test.html=/usr/local/var/www/html/test.htmlindex : 设置首页,当只拜访server_name时前面不跟任何门路是不走root间接走index指令的;如果拜访门路中没有指定具体的文件,则返回index设置的资源,如果拜访http://localhost/html/ 则默认返回index.html5、location uri正则表达式. :匹配除换行符以外的任意字符? :反复0次或1次+ :反复1次或更屡次* :反复0次或更屡次\d :匹配数字^ :匹配字符串的开始$ :匹配字符串的完结{n} :反复n次{n,} :反复n次或更屡次[c] :匹配单个字符c[a-z] :匹配a-z小写字母的任意一个(a|b|c) : 属线示意匹配任意一种状况,每种状况应用竖线分隔,个别应用小括号括括住,匹配合乎a字符 或是b字符 或是c字符的字符串\ 反斜杠:用于本义特殊字符小括号()之间匹配的内容,能够在前面通过$1来援用,$2示意的是后面第二个()里的内容。正则外面容易让人困惑的是\本义特殊字符。 ...

July 28, 2021 · 3 min · jiezi

关于nginx:有了-NGINX-和-Kong为什么还需要-Apache-APISIX

2021 年 5 月,云原生社区技术沙龙·广州站,Apache APISIX 开源我的项目创始人 & PMC 王院生在流动上做了《有了 NGINX 和 Kong,为什么还须要 Apache APISIX》的分享,以下是现场分享的文字版。以下分享仅代表作者个人观点。大家好,十分开心给大家分享一个让我冲动的主题《有了 NGINX 和 Kong,为什么还须要 Apache APISIX》。之所以咱们要做 NGINX 和 Kong 的代替我的项目,理论和咱们后端架构演变史大背景非亲非故,我会先和大家一起分享后端架构演变过程,这十分重要。首先做下自我介绍,自己叫王院生。和这次大会主办者净超一样咱们都做社区很久,我在 15 年写了一本电子书叫《OpenResty 最佳实际》,通过这本书结成了一个超万人社区。从那个时候开始集体对开源自身越发感兴趣,15 年以前我基本上次要是开源软件的使用者,而后缓缓变成社区的一个协办者,再往后变成社区领导者,兴许你会问为什么?很简略,因为这本书是你写的,他人遇到各种各样的问题,有高级的也有比拟一般的,问得多了我就逐渐成为老师并最终成了社区领导者,像那句名言“走的人多了,也变成了路”。2019 年我与合伙人温铭一起开办了深圳干流科技公司,它是一家以开源为依靠的商业化公司。这家公司承载了我俩很多集体现实,也能够说是在做每一位一般程序员的现实,不想庸庸碌碌 996,我常常对他人说我的幻想就是“把我的名字刻入史册”,悲催的是人类曾经不须要史册了。这是咱们团队,大家次要是近程合作,所有人聚在一起比拟难。公司晚期阶段只有五六个人时,还能比拟容易的把团队聚起来,但从往年之后就始终没聚齐过,这是咱们往年到目前以来最齐的一次(但仍然有几位同学没能一起)。作为一家技术说了算的商业公司,技术在我司有十分大的话语权,尊重技术从尊重技术人才开始。没有 996 ,没有下班打卡,近程办公,欢送感兴趣的同学分割咱们,期待有幻想、有现实的你退出我司。这次演讲主题须要一些背景,咱们先说说后端架构演变史。先跟大家回顾一下这张图,右图局部从上到下它不是具体数据流程图,它是咱们后端架构演变史。从最传统的单体大利用,而后变成面向服务架构(SOA),而后是微服务,别离呈现了 Spring Cloud 和 Kubernetes。Spring Cloud 架构次要服务 JAVA 语言开发者,Kubernetes 是容器编排反对任何语言,以及最近社区比拟热的话题服务网格。我常常跟公司共事说,咱们展望未来五年,甚至是十年之后,哪个架构是最终极计划?从目前信息看,服务网格会大概率胜出。即便当下它还有很多问题,但我置信这些问题都能被解决。在守业之初,在脑子里过这张图的时候特地有意思。咱们可能看到,随着咱们后端架构的逐渐迭代,咱们引入了各种不同组件。比方到了 SOA 也就是面向服务的架构,引入反向代理组件,选型通常是 NGINX,HAProxy。迭代到微服务架构后,通常会抉择一些更古代的 API 网关产品,比方 Kong、Traefik ,当然也有一些用户因为惯性习惯,还会持续抉择应用 NGINX,尽管它有能力弱、应用不不便等毛病,但胜在稳固、牢靠。说句题外话,从寰球市场占有率看,NGINX 成为占有率最高的 Web Server 是在 2019 年 4 月份,感兴趣的同学能够到看下最新的 netcraft 报告 April 2021 Web Server Survey。 随着后端架构继续迭代,进入到了 Kubernetes 时代后,流量出入口 Ingress 大家默认会应用官网的 Kubernetes Ingress,这个我的项目是基于 NGINX 本地配置文件。在国内也有一些公司在应用 Traefik 作为 Ingress,这与国内 Golang 开发者基数比拟大有很大关系。 ...

July 27, 2021 · 2 min · jiezi

关于nginx:Linux下Nginx相关常用操作

nginx作为应用最为宽泛的http服务器,本文零碎介绍了其在Linux的最罕用操作,为大家提供了相干性能速查手册。内容次要包含了,日常操作、常见配置、常见谬误、相干资源三局部内容。Nginx整体介绍本文相干前提条件Nginx日常操作 通过软件源进行装置启动与进行 查看nginx运行日志Nginx常见配置 一般性操作配置文件构造主配置文件https服务反向代理本地JAVA利用示例相干学习资源Nginx整体介绍NGINX是一个收费、开源、高性能的HTTP服务器和反向代理,以及IMAP/POP3代理服务器。NGINX以其高性能、稳定性、丰盛的功能集、简略的配置和低的资源耗费而闻名。 本文相干前提条件本文所有操作指令均以曾经取得系统管理员权限为前提。因为不同的Linux发行版应用的软件依赖管理工具、零碎服务配置工具差别较大,须要依据不同操作系统抉择相应的指令。 其中不同发行版软件依赖管理工具映射关系如下: yum,实用于Centos7其中不同发行版应用的服务管理工具映射关系如下: systemctl,实用于Centos7Nginx日常操作通过软件源进行装置增加EPEL软件源,如果曾经装置EPEL仓库请跳过该步骤。yum yum install epel-release装置Nginx软件yum yum install nginx启动与进行设置开机启动systemctl systemctl enable nginx启动nginxsystemctl systemctl start nginx进行nginxsystemctl systemctl stop nginx查看以后状态systemctl systemctl status nginx重启nginxsystemctl systemctl restart nginx从新加载配置systemctl systemctl reload nginx查看nginx运行日志nginx的默认日志门路配置为 /var/log/nginx/,该章节默认指令操作目录为日志门路。依据日志的操作目标不同,个别会应用cat、grep、tail等命令查看日志,该章节默认查看操作为实时滚动查看。 查看拜访日志tail -f access.log查看谬误日志tail -f error.logNginx常见配置一般性操作在进行配置文件改变后,须要应用执行从新加载使得配置信息失效,还有多数状况须要重新启动nginx服务。 配置文件构造个别nginx相干的配置文件都在 /etc/nginx/ 目录中。主配置文件为上述目录的 nginx.conf ,其中定义了nginx的默认配置信息。依据主配置文件默认定义,每一个独立的nginx服务配置文件应放在配置目录的 conf.d/ 子目录当中。个别子配置文件以域名进行命名不便运维人员检索,例如 dm2box.com.conf 。主配置文件主配置文件作用次要为定义软件公共配置信息,包含日志门路配置、子配置文件配置等要害信息。 /etc/nginx/nginx.conf user nginx;worker_processes auto;# 谬误日志门路配置error_log /var/log/nginx/error.log;pid /run/nginx.pid;# 加载动静模块配置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"'; # 拜访日志门路配置 access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; # 加载服务器子配置文件 include /etc/nginx/conf.d/*.conf;}https服务反向代理本地JAVA利用示例该示例是JAVA网站的典型配置示例,其中包含了反向代理配置、http全副重定向至本域https服务、SSL证书与平安配置等要害配置。 /etc/nginx/conf.d/dm2box.com.conf ...

July 23, 2021 · 1 min · jiezi

关于nginx:锁屏面试题百日百刷nginx如何做到高可用

锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cc/#/introductionPage。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步,吊打面试官!接下来的是今日的面试题: ====Nginx负载平衡怎么实现的?策略有哪些?为了防止服务器解体,大家会通过负载平衡的形式来分担服务器压力。将对台服务器组成一个集群,当用户拜访时,先拜访到一个转发服务器,再由转发服务器将拜访散发到压力更小的服务器。Nginx负载平衡实现的策略有以下五种:1、轮询(默认)每个申请按工夫程序逐个调配到不同的后端服务器,如果后端某个服务器宕机,能主动剔除故障零碎。upstream backserver { server 192.168.0.12; server 192.168.0.13; }2、权重 weightweight的值越大调配到的拜访概率越高,次要用于后端每台服务器性能不平衡的状况下。其次是为在主从的状况下设置不同的权值,达到正当无效的地利用主机资源。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; }url_hash(第三方插件)必须装置Nginx的hash软件包按拜访url的hash后果来调配申请,使每个url定向到同一个后端服务器,能够进一步提高后端缓存服务器的效率。upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; } ====Nginx配置高可用性怎么配置(负载平衡怎么做配置)?当上游服务器(实在拜访服务器),一旦呈现故障或者是没有及时相应的话,应该间接轮训到下一台服务器,保障服务器的高可用Nginx配置代码:server {listen 80; server_name www.lijie.com; location / { 指定上游服务器负载平衡服务器 proxy_pass http://backServer; nginx与上游服务器(实在拜访的服务器)超时工夫 后端服务器连贯的超时工夫_发动握手等 候响应超时工夫 proxy_connect_timeout 1s; nginx发送给上游服务器(实在拜访的服务器)超时工夫 proxy_send_timeout 1s; nginx承受上游服务器(实在拜访的服务器)超时工夫 proxy_read_timeout 1s; index index.html index.htm; } } ...

July 21, 2021 · 1 min · jiezi

关于nginx:在-Ubuntu-上使用源码安装-OpenResty

本文将介绍如何在 Ubuntu 上应用源码装置 OpenResty。 指标Ubuntu 18.04OpenResty 1.19.3.2装置依赖启用 HTTP 根本状态模块:--with-http_stub_status_module启用 HTTP gzip 动态文件压缩模块:--with-http_gzip_static_module启用 HTTP/2 模块:--with-http_v2_modulezlib1g-dev: the HTTP gzip module requires the zlib library.apt-get update -yapt-get install -y libpcre3-dev \ libssl-dev \ perl \ make \ build-essential \ curl \ zlib1g-dev下载 OpenRestycd /optcurl -LO https://openresty.org/download/openresty-1.19.3.2.tar.gztar zxf openresty-1.19.3.2.tar.gz装置 OpenResty.configure \ --with-http_gzip_static_module \ --with-http_v2_module \ --with-http_stub_status_modulemakemake install应用 systemd 治理 OpenResty 服务编写 Service 文件在 /usr/lib/systemd/system 目录下创立一个 openresty.service 文件,文件内容如下: # Stop dance for OpenResty# =========================## ExecStop sends SIGSTOP (graceful stop) to OpenResty's nginx process.# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control# and sends SIGTERM (fast shutdown) to the main process.# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends# SIGKILL to all the remaining processes in the process group (KillMode=mixed).## nginx signals reference doc:# http://nginx.org/en/docs/control.html#[Unit]Description=The OpenResty Application PlatformAfter=syslog.target network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/usr/local/openresty/nginx/logs/nginx.pidExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'ExecStart=/usr/local/openresty/nginx/sbin/nginx -g 'daemon on; master_process on;'ExecReload=/usr/local/openresty/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reloadExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /usr/local/openresty/nginx/logs/nginx.pidTimeoutStopSec=5KillMode=mixed[Install]WantedBy=multi-user.target启动 OpenResty# 设置自启动systemctl enable openresty# 启动 OpenRestysystemctl start openresty# 查看 OpenResty 服务状态systemctl status openresty● openresty.service - The OpenResty Application Platform Loaded: loaded (/usr/lib/systemd/system/openresty.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2021-07-10 11:36:07 CST; 26min ago Process: 12735 ExecStart=/usr/local/openresty/nginx/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 12734 ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 12736 (nginx) Tasks: 2 (limit: 1126) CGroup: /system.slice/openresty.service ├─12736 nginx: master process /usr/local/openresty/nginx/sbin/nginx -g daemon on; master_process on; └─12737 nginx: worker processJul 10 11:36:07 iZj6c0qglm7rjjctj7zxnfZ systemd[1]: Starting The OpenResty Application Platform...Jul 10 11:36:07 iZj6c0qglm7rjjctj7zxnfZ systemd[1]: openresty.service: Failed to parse PID from file /usr/local/openresty/nginx/logs/nginx.pid:Jul 10 11:36:07 iZj6c0qglm7rjjctj7zxnfZ systemd[1]: Started The OpenResty Application Platform.一键装置脚本GitHub Gist ...

July 10, 2021 · 2 min · jiezi

关于nginx:前端静态服务踩坑实践

前言随着前端我的项目的增大,越来越多时候会把动动态资源进行拆散部署,对于拆散部署时经常波及到代理转发的问题,专网我的项目次要应用 nginx + docker + k8s 的部署形式,本文次要分享一些相干我的项目的实际过程的踩坑历程及回顾思考。 背景 公司云环境提供了对象存储服务(ps:相似于腾讯云的对象存储COS),但出于平安思考,整个环境都是基于内网的零碎,其https的证书并未进行相干的CA机构认证,但专网自服务项目会波及到在公网让客户拜访的问题,浏览器对于没有CA认证的https会给出正告,须要用户进行点击确认,用户体验极差,出于此思考,在部署时候决定对动态服务进行代理转发,整个计划就变成了 nginx1(纯前端利用) 和 nginx2(动态服务转发) 的负载代理问题 案例环境一致性问题 在开发过程中,常常会呈现环境的问题,当测试小姐姐来向咱们提bug时候,咱们常常的回复是:”在我这儿是好的啊,你在刷新(重启)一下试试“[手动狗头],这其实实质就是环境一致性的问题,对前端工程化来说,解决环境一致性问题其实是运维中一个比拟常见的问题,常见的有云端IDE及对立配置文件等来解决,这里咱们在构建脚手架的时候借鉴了dll的思维,通过一个config.json将配置每次从服务端申请下来解析后对url进行相应的配置,生产环境下走nginx,开发环境下走dev.proxy.js config.json{ "IS_NGINX": 1, "API" : { "TGCOS": { "alias": "/tgcos/", "url": "http://bfftest.default.service.local:8148/tgcos/" } }}dev.proxy.jsmodule.exports = { '/tgcos/': { target: 'http://172.24.131.166:8148' }}nginx1.conf (纯前端利用)server { location /tgcos/ { proxy_pass http://bfftest.default.service.local:8148/tgcos/; }}nginx2.conf (动态服务代理转发)server { location / { proxy_pass http://cos.zz-hqc.cos.tg.ncmp.unicom.local/ } location /tgcos/ { proxy_pass http://cos.zz-hqc.cos.tg.ncmp.unicom.local/ }}问题:这里配置了代理之后,在webpack中因为转发的服务又从新传了一层,因此在代理的时候发现会少一层转发,这时就会找不到代理的地址,解决办法是将根目录也代理到同一个cos的地址上,尽管俊俏然而能够解决问题k8s域名问题在部署过程中,因为k8外部的ip漂移问题,因此心愿可能应用k8外部的dns域名将代理转发的域名固定住。k8s中的dns有两个罕用的插件,即:KubeDNS和CoreDNS,在Kubernetes 1.12之后,CoreDNS成为其默认的DNS服务器,其配置在/etc/resolv.conf能够进行批改,次要有三个配置的关键字 nameserver 定义DNS服务器的IP地址search 定义域名的搜寻列表,当查问域名中蕴含.的数量少于options.ndots的值时,会顺次匹配列表中的每个值options 定义域名查找时的配置信息咱们进入启动的Pod中看一下它的resolv.conf nameserver 11.254.0.10search default.svc.cluster.local svc.cluster.local cluster.localoptions nodts:5这里我没有做其余的操作,因此失常来说应该是能够应用的是默认的k8s的dns策略,即应用默认的ClusterFirst的策略 ...

July 8, 2021 · 1 min · jiezi

关于nginx:支付二维码整合-三码合一支持支付宝QQ微信

领取二维码整合 - 三码合一反对支付宝、QQ、微信1. 前提:获取各个二维码的具体内容在写代码前,咱们须要先获取不同领取形式的二维码内容。很简略,只须要关上各个领取码,截图,而后轻易找个能够扫码的工具把各个码的内容给扫出来,失去文本内容即可。上面是我的内容: 支付宝: https://qr.alipay.com/tsx108134acakckixsivtd4微信: wxp://f2f0kIl6qSrlWNFuIo8t8rXCU7Si7CC7ucQsQQ: https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&f=wallet&a=1&ac=CAEQi5uqmQMY8Y-T_wU%3D_xxx_sign&u=QQ号&n=昵称2. 办法一:应用Nginx 散发内容能够看到各个领取形式都是甚于带参跳转协定,所以咱们能够用一个固定的网址,让它去检测不同的网站进而跳转不同的链接。这一步能够用后台程序跳转,也能够用Nginx 这样的服务器去做,因为只须要能对申请的内容做辨别就能够了。 用Nginx 能够这样写: location /pay { if ( $http_user_agent ~* "AlipayClient" ) { return 302 "https://qr.alipay.com/tsx108134acakckixsivtd4"; } if ( $http_user_agent ~* "MicroMessenger" ) { return 302 "wxp://f2f0kIl6qSrlWNFuIo8t8rXCU7Si7CC7ucQs"; } if ( $http_user_agent ~* "QQ" ) { return 302 "https://i.qianbao.qq.com/wallet/sqrcode.htm?m=tenpay&f=wallet&a=1&ac=CAEQi5uqmQMY8Y-T_wU%3D_xxx_sign&u=QQ号&n=昵称"; } return 400 "不反对的类型";}经测试,发现QQ, 微信不能够用 可能是腾讯为了平安躲避了由跳转过来的调用吧。 3. 办法二:应用独立的二维码1因为不能应用跳转去齐全反对三种领取形式了。这里咱们小改一下,首先用二维码生成工具生成款式对立的二维码,因为原生那个三家的码都长得不太一样会影响好看。 QQ: 微信: 而后小改一下下面的Nginx 配置,改成如果是这两个的话跳转到对应的页面。 <s>删减1</s> 下面这个页面,如果你是从微信浏览器关上的应该会看到微信的领取码,如果是QQ 浏览器中关上应该会看到QQ 的领取码。如果是从其余浏览器或者PC 则什么码都看不到。 此时的Nginx 的配置: ...

July 6, 2021 · 1 min · jiezi

关于nginx:内卷应知应会nginx-在前端中的简单应用

吐槽一下本人三个月了,三个月没写过货色了,连媳妇都忍不住说:”感觉往年你不是很上进啊“,我回了一句:"自信点,去掉感觉"。 四月忙婚礼,五月需要成山,六月略微闲点,刚巧赶上又NBA季后赛与欧洲杯,哪有什么工夫学习,全躺平了。 其实从刚入行起,就陆陆续续接触Nginx,学着装置,学着配,学着用它解决不是前端管得了的前端问题,常识零零星星从百度查了很多,但从没记住,于是.... 对于Nginx如果对Nginx一点概念还没有,举荐看一下百度百科之nginx; 记住一句:Nginx是一个很弱小的高性能Web和反向代理服务,它具备很多十分优越的个性; 高性能 Web 服务Web 服务实际上又称动态资源服务,自从前后端拆散后,前端的输入趋向于动态资源的模式,什么是动态资源:就是咱们通常用webpack构建输入的后果,比方: 而为了提供文件在互联网中的可拜访性,前端还是须要依赖动态资源服务;最罕用的做法就是Node服务和Nginx服务。 Node服务最常见的,就是WebpackServer, 在前端开发联调时常常用到, 启动后咱们就能够通过http://localhost:8907/bundle.05a01f6e.js的模式来拜访构建资源;除此之外,我给大家安利另一款Node服务库:serve, 它也能疾速启动一个动态资源服务。 但在生产环境,咱们个别用Nginx来解决,不是Node不好,而是Nginx曾经够好了。通常整个大前端会有很多前端我的项目,咱们都将构建后果放在一台服务器上(个别有备份机器)的某个文件夹下,而后通过装置Nginx来创立一个动态资源服务供所有前端资源的拜访;比方文件夹static下有A,B,C,D四个前端我的项目资源, 咱们通过nginx配置: server { listen 80; listen [::]:80; server_name static.closertb.site; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { alias /home/static/; autoindex on; if ($request_uri ~ .*\.(css|js|png|jpg)$) { #etag on; expires 365d; #add_header Cache-Control max-age=31536000; } } }咱们即可通过http://static.closertb.site/A... 拜访A我的项目,通过http://static.closertb.site/C... 拜访C我的项目, 从而做到一鸡多吃,这种玩法在HTTPS与HTTP2的时代特地常见。 以上就是Nginx作为Web服务的简略用法,接下来咱们理解一下反向代理服务 反向代理服务作为一个开发者,可能常常听到代理两字,但很多人区分不清楚正向和反向的区别: 如上图左侧所示,正向代理是用户的被动行为,如咱们翻墙时拜访goggle所做的;右侧反向代理是咱们拜访的服务器行为,作为用户的咱们是不能管制也无需关注的。 反向代理在服务部署中,是一种十分常见的技术,比方负载平衡、容灾、缓存。 而对于前端开发来说,反向代理多用于申请转发,来解决跨域问题。当咱们把前端动态资源服务都指向一个域名(static.closertb.site)时,与服务端申请域名(server.closertb.site)不统一,就会造成跨域。如果服务端不配合的话,那通过nginx,前端也是能够轻松做到的,在后面的配置上,咱们增加: server { listen 80; listen [::]:80; server_name static.closertb.site; location /api/ { proxy_pass http://server.closertb.site; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { .... }所以当网页收回一个申请:http://static.closertb.site/a...时,理论申请地址是:http://server.closertb.site/a...,这就简略实现了一个服务代理。其原理与WebpackServer的proxy类似. ...

July 4, 2021 · 2 min · jiezi

关于nginx:nginx配置全局命令

1 vim /etc/init.d/nginx #!/bin/sh# nginx - this script starts and stops the nginx daemin## chkconfig: - 85 15# description: Nginx is an HTTP(S) server, HTTP(S) reverse \# proxy and IMAP/POP3 proxy server# processname: nginx# config: /usr/local/nginx/conf/nginx.conf# pidfile: /usr/local/nginx/logs/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"lockfile=/var/lock/subsys/nginxstart() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval}stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval}restart() { configtest || return $? stop start}reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo}force_reload() { restart}configtest() { $nginx -t -c $NGINX_CONF_FILE}rh_status() { status $prog}rh_status_q() { rh_status >/dev/null 2>&1}case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esac chmod 755 /etc/init.d/nginx vim /etc/profile export PATH=/home/nginx/sbin:$PATH #门路是ng装置的门路 source /etc/profile实现! ...

July 1, 2021 · 1 min · jiezi

关于nginx:Nginx实现正向代理

应用正向代理的场景,以及正向代理和反向代理的区别: 了解: 客户端 代理 服务器A B C 正向: * B C 反向: A B * 正向暗藏客户端反向暗藏服务端 1 查看文档 https://github.com/chobits/ngx_http_proxy_connect_module/blob/master/README.md2 其中: 构建为动静模块装置nginx 和 nginx_proxy_connect module 从nginx的1.9.11开始,你也能够作为一个动静模块,通过应用编译该模块--add-dynamic-module=PATH选项,而不是--add-module=PATH在对./configure命令行。$ $ wget http://nginx.org/download/ngi...$ tar -xzvf nginx-1.9.12.tar.gz$ cd nginx-1.9.12/$ patch -p1 < /path/to/ngx_http_proxy_connect_module/patch/proxy_connect.patch$ ./configure --add-dynamic-module=/path/to/ngx_http_proxy_connect_module$ make && make install 3 make可能遇到的问题1 error: this statement may fall through [-Werror=implicit-fallthrough=]2 “src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘current_salt’” 问题1解决,正文掉这一行 vim /opt/nginx/nginx-1.9.2/src/os/unix/ngx_user.c 36 : / cd.current_salt[0] = ~salt[0];/ ...

July 1, 2021 · 2 min · jiezi

关于nginx:centos79-部署nginx1197-配置双机高可用

master:10.17.17.78slave: 10.17.17.79vip: 10.17.17.80 install nginx1.19.710.17.17.78/79 同样操作[root@baojian-79 ~]# wget http://nginx.org/download/nginx-1.19.7.tar.gz[root@baojian-79 ~]# yum -y install gcc pcre-devel zlib-devel openssl openssl-devel lua-devel python-devel -y [root@baojian-79 ~]# tar -xf nginx-1.19.7.tar.gz[root@baojian-79 ~]# cd nginx-1.19.7###带附加模块的./configure --prefix=/data/nginx --with-pcre --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-ipv6 --with-http_realip_module --with-http_gzip_static_module --with-pcre-jit --with-ld-opt=-ljemalloc --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib --add-module=/usr/local/src/nginx1.19.7-module/lua-nginx-module-0.10.13 --add-module=/usr/local/src/nginx1.19.7-module/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/nginx1.19.7-module/nginx-module-vts --add-module=/usr/local/src/nginx1.19.7-module/nginx_upstream_check_module###[root@baojian-79 ~]# ./configure --prefix=/data/nginx --with-pcre --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-ipv6 --with-http_realip_module --with-http_gzip_static_module --with-pcre-jit --with-ld-opt=-ljemalloc --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib [root@baojian-79 ~]# make -j 4 && make installinstall keepalived10.17.17.78/79 同样操作[root@baojian-78 ~]# yum install -y ipvsadm keepalived[root@baojian-78 ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { notification_email { } router_id LVS_DEVEL} vrrp_script chk_http_port { script "/data/nginx/sbin/nginx_pid.sh" interval 1 weight 2}vrrp_instance VI_1 { state MASTER interface ens192 #ip a查看你的网卡叫什么 virtual_router_id 28 priority 100 #slave 节点要比master小比方80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.17.17.80 } track_script { chk_http_port }} ...

June 24, 2021 · 2 min · jiezi

关于nginx:Nginx基础笔记

一、是什么Nginx是一个高性能的HTTP和反向代理的Web服务器,外围特点是占用内存少,并发能力强。 二、利用场景HTTP服务器 高并发(5W并发连贯),高负载,自身低功耗反向代理服务器负载平衡服务器动静拆散三、特点跨平台 -> 大多数类Unix零碎,以及Windows上手容易高并发、性能好稳定性好四、反向代理1. 正向代理申请 -> 代理服务器 -> 指标服务器 ,返回的时候原路返回 2. 反向代理申请 -> Nginx(裸露的ip及端口) -> 实在解决的服务的ip(暗藏) Nginx反向代理到实在服务提供者,依据负载平衡策略,用户只能看到反向代理服务器Nginx的端口及ip。 五、负载平衡当申请到来时,调配哪个服务解决申请的过程。为了解决服务高负载的问题。 1. 策略: 轮训(默认)upstream Servers { server ip:port; server ip:port;}location /path/ { proxy_pass http://Servers/;}2. 策略: 权重# 权重越高被调配申请越多upstream Servers { server ip:port weight=1; server ip:port weight=2;}3. 基于ip的hash# 每个申请依照ip的hash调配后果,批准客户端的申请会分到同一服务提供者,能够解决session问题。upstream Servers { ip_hash; server ip:port; server ip:port;}六、动静拆散动态资源:html,js,icon等文件交由Nginx路由动静资源:Servlet,接口 交由服务的Tomcat # 动态资源location /static/ { root /app/static/ # 动态资源目录} 七、命令./nginx #启动./nginx -s stop./nginx -s reload #从新加载配置文件八、内存模型Master过程用于管制woker过程worker过程真正负责工作,独立互不影响九、配置# 所有配置以 ; 结尾#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker_connections 1024;}http { include mime.types; 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # 负载平衡 upstream Server { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; # 监听端口 server_name localhost; #监听ip #charset koi8-r; #access_log logs/host.access.log main; location / { # / 代表默认反向代理的状况# #root html; #index index.html index.htm; # 转发到 127.0.0.1:8080 proxy_pass http://127.0.0.1:8080/; } # 依据不同门路转发 # 语法:location [ = | ~ | ~* | ^~ ] /URI { … } https://segmentfault.com/a/1190000022315733 location /path/ { #root html; #index index.html index.htm; # 转发到 127.0.0.1:8081 # proxy_pass http://127.0.0.1:8081/; # 负载平衡形式 proxy_pass http://Server/; } #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 html; } }}

June 24, 2021 · 2 min · jiezi

关于nginx:mac-M1-nginx配置文件位置

mac nginx配置的原地位/usr/local/etc/nginx/nginx.conf mac M1 nginx配置地位/usr/local/Homebrew/etc/nginx/nginx.conf

June 22, 2021 · 1 min · jiezi

关于nginx:nginx安装配置

Nginx的装置步骤1、装置Nginx依赖库yum -y install gcc pcre-devel zlib openssl openssl-devel2、解压Nginx安装包tar –zxf nginx-1.12.2.tar.gz3、进入Nginx目录cd nginx-1.12.24、配置文件,生成makefile文件./configure --prefix=/usr/local/nginx --prefix=PATH 指定nginx的装置目录。默认 /usr/local/nginx--conf-path=PATH 设置nginx.conf配置文件的门路。nginx容许应用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf--user=name 设置nginx工作过程的用户。装置实现后,能够随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。--group=name相似--with-pcre 设置PCRE库的源码门路,如果已通过yum形式装置,应用--with-pcre主动找到库文件。应用--with-pcre=PATH时,须要从PCRE网站下载pcre库的源码(版本4.4 – 8.30)并解压,剩下的就交给Nginx的./configure和make来实现。perl正则表达式应用在location指令和 ngx_http_rewrite_module模块中--with-zlib=PATH 指定 zlib(版本1.1.3 – 1.2.5)的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module时须要应用zlib--with-http_ssl_module 应用https协定模块。默认状况下,该模块没有被构建。前提是openssl与openssl-devel已装置--with-http_stub_status_module 用来监控 Nginx 的以后状态--with-http_realip_module 通过这个模块容许咱们扭转客户端申请头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意义在于可能使得后盾服务器记录原始客户端的IP地址--add-module=PATH 增加第三方内部模块,如nginx-sticky-module-ng或缓存模块。每次增加新的模块都要从新编译(Tengine能够在新退出module时无需从新编译)5、编译装置make && make install6、 实现装置后进入nginx目录下的sbin目录,启动nginx./nginx 启动Nginx./nginx -s reload 重读配置文件./nginx -s stop 进行Nginx./nginx -s reopen 重启Nginx./nginx -s quit 优雅退出 user nobody nobody 配置运行服务器的用户和组(nobody示意所有用户和组都能够启动Nginx)worker_processes 8 ; 容许生成的worker process数,默认1error_log logs/error.log info; 配置谬误日志的寄存门路及存储级别(日志级别低到高的程序debug|info|notice|warn|error|crit|alert|emerg,默认error)pid logs/nginx.pid; 配置PID文件寄存门路 events { accept_mutex on|off; 设置网络连接的序列化,默认开启(on)状态,给多个Nginx过程接管连贯进行序列化,避免多个过程对连贯争抢multi_accept on|off; 设置同时接管多个网络连接,默认敞开(off)状态,一次只能接管一个新达到的网络连接use method; 配置事件驱动模型,method可抉择的内容有:select、pool、kqueue、epoll、rtsig、/dev/poll、eventportworker_connections 1024; 配置最大连接数(容许每一个worker process同时开启的最大连接数)} ...

June 20, 2021 · 2 min · jiezi

关于nginx:nginx-服务器-https部署-ssl自签名

第一步、应用 openSSL 签证书windows 下 openSSL 装置到 openSSL 官网下载 安装包点击装置配置 openSSL 环境变量测试 openSSL 是否装置胜利 在cmd 中输出 openssl version 显示 openSSL 版本即胜利centos下 openSSL 装置1.查看是否装置,在终端中,输出openssl version 显示 openSSL 版本即装置,无需再次装置 2.如果没有装置执行 yum install opensslyum install openssl-devel生成签名生成 key 文件openssl genrsa -idea -out jesonc.key 1024输出明码,确认明码生成 csr文件openssl req -new -key jesonc.key -out jesonc.csr生成 ca 文件,有效期设置了 10 年openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt应用openssl将私钥转换为无明码私钥openssl rsa -in jesonc.key -out jesonc_nopsd.key第二步、 配置 nginx批改 nginx.conf 中配置,https 申请配置如下,批改后重启nginx 即可 ...

June 15, 2021 · 1 min · jiezi

关于nginx:NginxTengine-服务器安装-SSL-证书

背景应用阿里云下载免费版 DigiCert Inc 证书,并基于 Nginx web 服务器装置 SSL 证书装置步骤在证书控制台下载 Nginx 版本证书。下载到本地的压缩文件包解压后蕴含: .crt 文件:是证书文件,crt 是 pem 文件的扩展名。.key 文件:证书的私钥文件(申请证书时如果没有抉择主动创立 CSR,则没有该文件)。情谊提醒: .pem 扩展名的证书文件采纳 Base64-encoded 的 PEM 格局文本文件,可依据须要批改扩展名。 以 Nginx 标准配置为例,如果证书文件名是 a.pem,私钥文件是 a.key。 在 Nginx 的装置目录下创立 cert 目录,并且将下载的全副文件拷贝到 cert 目录中。如果申请证书时是本人创立的 CSR 文件,请将对应的私钥文件放到 cert 目录下并且命名为 a.key; 关上 Nginx 装置目录下 conf 目录中的 nginx.conf 文件,找到: # HTTPS server# #server {# listen 443;# server_name localhost;# ssl on;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_timeout 5m;# ssl_protocols SSLv2 SSLv3 TLSv1;# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;# ssl_prefer_server_ciphers on;# location / {###}#}将其批改为 (以下属性中 ssl 结尾的属性与证书配置有间接关系,其它属性请联合本人的理论状况复制或调整) : ...

June 15, 2021 · 2 min · jiezi

关于nginx:搭建后台环境nginx-https-配置二级域名

前言设置这个是比拟好用的。代理的话,最好是以跑 https 做测试。如果想弄个收费的证书的话,点击我一、证书上传上传间接能够通过 finalShell 工具,证书放在:/etc/ssl/certs/证书名.pem;二、配置http重定向https进入到cd /usr/local/nginx/conf/编辑vi nginx.conf找到 server 是 80的。加上重定向到https下面# 省略代码块 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; rewrite ^(.*)$ https://$host$1 permanent; #用于将http页面重定向到https页面 location / { root html; index index.html index.htm; } # 省略代码块加上了后,在找到正文的:# HTTPS server 。将上面的一段话http的正文关上,而后更改ssl地址 # 省略代码块 。找到 HTTPS server正文,上面全副关上 # HTTPS server server { listen 443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/4489861_www.lolku.cn.pem; ssl_certificate_key /etc/ssl/certs/4489861_www.lolku.cn.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }三、重新启动配置重启后,就能够在页面上跑了。/usr/local/nginx/sbin/nginx -s reload四、二级域名https代理后面只是解说以后一级域名https的申请。依据http二级域名教训,进行制作二级https二级域名。都是一样的,只有前面新增一个新的,而后再代理上新的就好了(留神:肯定是在第一个server的前面新增server)。比方:worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; rewrite ^(.*)$ https://$host$1 permanent; #用于将http页面重定向到https页面 location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # 只能在前面新增,不能放在后面 server { listen 80; # 端口 server_name api.xxxx.cn; # 域名 rewrite ^(.*)$ https://$host$1 permanent; #用于将http页面重定向到https页面 location / { proxy_pass http://localhost:3000; # 代理的中央 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } # # HTTPS server # # server { listen 443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/xxxxx.pem; ssl_certificate_key /etc/ssl/certs/xxxxx.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } # 只能在前面新增,不能放在后面 server { listen 443 ssl; server_name api.xxx.cn; ssl_certificate /etc/ssl/certs/xxxxxx.pem; ssl_certificate_key /etc/ssl/certs/xxxxxx.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:3000; # 代理的中央 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }}五、拜访拜访 http://xxx.cn 是能够的,而后api.xxx.cn 会报危险正告,起因在于代理的 proxy_pass http://localhost:3000; 这个地址是 http 不是https,所以有问题。解决方案:http://locakhost:3000 换成 https://locakhost:3000 或者改成 https://xxx.cn:3000六、重启下配置留神:每次更改下配置都得重新启动下/usr/local/nginx/sbin/nginx -s reload【原地址】: https://lolku.cn/web/details/posts/39 ...

June 9, 2021 · 2 min · jiezi

关于nginx:前端需要掌握的Nginx知识点

什么是Nginx?Nginx是一款收费开源的高性能HTTP服务器以及反向代理服务器(Reverse Proxy),同时能够提供IMAP/POP3/SMATP代理服务等性能。可能疾速的响应动态页面申请和反对第三方功能模块扩大。 Nginx的长处高并发、高性能(官网给出的并发数据5万,理论中能够达到2-4万)轻量级、内存耗费少稳定性高,宕机概率低反对热部署模块化设计,扩展性较好cpu亲和Nginx罕用的场景动态资源服务器动静匹配反向代理Gzip压缩负载平衡Nginx的装置配置mac下镜像飞速装置Homebrew教程: https://zhuanlan.zhihu.com/p/... $ brew install nginxNginx罕用的命令启动: nginx查看版本号: nginx -v查看nginx 编译的参数: nginx -V重新启动nginx: nginx -s reload优雅重启,并从新载入配置文件nginx.conf: /usr/local/nginx/sbin/nginx -s reload优雅进行nginx,有连贯时会等连贯申请实现再杀死worker过程 /usr/local/nginx/sbin/nginx -s quit具体罕用的命令参考如下: nginx -s stop 疾速敞开Nginx,可能不保留相干信息,并迅速终止web服务。nginx -s quit 安稳敞开Nginx,保留相干信息,有安顿的完结web服务。nginx -s reload 因扭转了Nginx相干配置,须要从新加载配置而重载。nginx -s reopen 从新关上日志文件。nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。nginx -t 不运行,仅测试配置文件。nginx 将查看配置文件的语法的正确性,并尝试关上配置文件中所援用到的文件。nginx -v 显示 nginx 的版本。nginx -V 显示 nginx 的版本,编译器版本和配置参数。胜利看到欢送页面~!(对应的html是/usr/local/var/www/index.html) Nginx的默认配置Nginx 装置目录下的nginx.conf就是Nginx全局的配置文件,咱们次要批改这里的内容。nginx.conf.default作为配置文件的备份。nginx默认应用8080端口 如果发现端口被占用了,能够杀掉应用应用改端口的过程,也能够批改/usr/local/etc/nginx/nginx.conf 下的 http { server { listen 8181; server_name localhost; #charset koi8-r; ..... } }其中nginx.conf中的配置信息如下: ...

June 9, 2021 · 3 min · jiezi

关于nginx:搭建后台环境nginx安装

下载地址: http://nginx.org/download/一、进入文件夹cd /usr/local/src二、下载wget http://nginx.org/download/nginx-1.6.2.tar.gz三、装置依赖如果在“需装置”教程中没有装置的话,请执行上面的这句话yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel四、解压缩tar -zxvf nginx-1.6.2.tar.gz五、进入解压的文件夹cd nginx-1.6.2/六、执行配置文件./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module 七、编译装置(默认装置在/usr/local/nginx)如果提醒上面这句话。是否装置过“需装置”文章外面的依赖了。而后再执行下 ./configure// make: *** 没有指明指标并且找不到 makefile。 进行。上面执行 make还执行装置命令make && make install八、命令安装程序地位在 /usr/local/nginx 目录中,也就是说配置文件也在其中启动服务器/usr/local/nginx/sbin/nginx从新载入配置文件/usr/local/nginx/sbin/nginx -s reload 重启 Nginx/usr/local/nginx/sbin/nginx -s reopen进行 Nginx/usr/local/nginx/sbin/nginx -s stop【原地址】: https://lolku.cn/web/details/posts/37

June 8, 2021 · 1 min · jiezi

关于nginx:加速-Nginx-响应的-5-个措施赶紧用…

核心内容次要是通过批改 Nginx 配置(Nginx 罕用配置汇总!从入门到干活足矣)文件来进行调优的! 通过优化网站,对 HTTP 服务器进行一些小的改变,能够缩小用户应用的网络带宽和服务器上的负载,就能够给更多用户提供服务。这里,咱们将介绍一些简略但功能强大的配置更改,这些改变操作步骤非常简单,但能够明显提高网站性能并缩小应用的网络带宽。 举一个现实存在的例子,咱们有一个电子商务的站点,该站点运行着 Nginx1.15.9 作为其 web 服务器。为了便于计算,咱们假如该站点每天有 100 个独立用户,30% 的用户是反复访问者,每个用户在一个会话中均匀拜访 4 个页面。 1、启用 Gzip 压缩Enabling Gzip Compression for HTML, CSS, and JavaScript Files 如您所知,在网站上构建页面的 HTML,CSS 和 JavaScript 文件可能十分宏大。在大多数状况下,Web 服务器能够即时压缩这些和其余文本文件,以节俭网络带宽。查看 Web 服务器是否正在压缩文件的一种办法,就是应用浏览器中的开发人员工具。 对于许多浏览器,您能够应用 F12 键拜访该工具,相干信息在 Network 选项卡上,能够失去如下所示的截图例子。正如您在左下角看到的,没有压缩:文本文件的大小为 1.15 MB,传输了大量数据。 默认状况下,压缩性能在 Nginx 中是禁用的,但因为装置形式或 Linux 发行版的不同,一些状况下可能在默认的 nginx.conf 配置文件中是启用状态。这里,咱们在 NGINX 配置文件中启用了 gzip 压缩: gzip on;gzip_types application/xml application/json text/css text/javascript application/javascript;gzip_vary on;gzip_comp_level 6;gzip_min_length 500;正如上面屏幕截图中看到的那样,压缩后数据传输缩小到 260KB,绝对来收缩小了约 80% 数据传输!对于页面上的每个新用户,您能够节俭大概 917KB 的数据传输。对于长期应用咱们网站的用户,每天能够节俭 62MB 带宽,每月能够节俭 1860MB 带宽。 ...

June 5, 2021 · 2 min · jiezi

关于nginx:centos-8-のnginx安装步骤

1.本步骤只实用于centos8 首先查看本人的版本: 对号入座 cat /etc/redhat-release 2.装置编译工具及库文件 make gcc-c++ 编译应用zlib zlib-devel nginx中gzip应用openssl openssl-devel nginx反对 https应用(即在ssl协定上传输http)执行命令: yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 3.装置PCRE(作用:让 Nginx 反对 Rewrite 性能) yum install -y pcre pcre-devel4.下载nginx 稳定版下载地址:http://nginx.org/download/nginx-1.18.0.tar.gz [root@localhost ~]# mkdir /home/work/nginx[root@localhost ~]# cd /home/work/nginx/[root@localhost nginx]# wget http://nginx.org/download/nginx-1.18.0.tar.gz--2020-05-26 23:42:49-- http://nginx.org/download/nginx-1.18.0.tar.gzResolving nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3Connecting to nginx.org (nginx.org)|62.210.92.35|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 1039530 (1015K) [application/octet-stream]Saving to: ‘nginx-1.18.0.tar.gz’nginx-1.18.0.tar.gz 100%[=======================================>] 1015K 8.40KB/s in 2m 3s 2020-05-26 23:44:53 (8.27 KB/s) - ‘nginx-1.18.0.tar.gz’ saved [1039530/1039530]5.解压 ...

June 5, 2021 · 2 min · jiezi

关于nginx:Nginx基础深度实践

1. 根底篇2. 场景实际篇3. 深度学习篇4. 架构篇 一、Nginx的配置场景代理服务动静拆散Nginx与LUA的开发动静缓存负载平衡......二、理解中间件架构2.1对sql的注入防攻打对申请的访问控制对申请的频率管制防爬虫管制......2.2Nginx应用层的平安防护基于Nginx的中间件架构性能优化的问题......三、Nginx技术原理http协定的原理Linux零碎原理

May 29, 2021 · 1 min · jiezi

关于nginx:Nginx配置网站默认https

Nginx配置网站默认https一、装置Nginxyum install nginx -y二、批改nginx.confvim /etc/nginx/nginx.conf配置80转443 配置https(参考--我这里博客是php我的项目) 三、启动nginxsystemctl start nginx四、成果

May 27, 2021 · 1 min · jiezi

关于nginx:centos7中nginx的systemctl启动方式启动停止重启开机启动

指标:在centos7中配置nginx的systemctl启动形式(启动、进行、重启、开机启动) 剖析:1.CentOS7的服务systemctl脚本寄存在:/usr/lib/systemd/,有零碎(system)和用户(user)之分: /usr/lib/systemd/system (零碎服务,开机不须要登录就能运行)/usr/lib/systemd/user (用户服务,须要登录后能力运行) 2./usr/lib/systemd/system 和 /etc/systemd/system的区别: 对于那些反对 Systemd(YUM/DNF/RPM/APT/etc) 的软件,装置的时候,会主动在 /usr/lib/systemd/system 目录增加一个配置文件。对于非软件包模式的长期软件装置,零碎操作员应将文件手动搁置在 /etc/systemd/system 留神: 设置开机自启动脚本能够在/etc/systemd/system或者/usr/lib/systemd/system目录下配置,当两个中央都配置了的状况下,/etc/systemd/system配置优先。3.每一个服务以.service结尾,个别会分为3局部:[Unit]、[Service]、[Install]:[Unit] 次要是对这个服务的阐明,内容包含Description和After,Description用于形容服务,After用于形容服务类别。[Service] 是服务的要害,是服务的一些具体运行参数的设置, Type=forking是后盾运行的模式PIDFile 为寄存PID的文件门路ExecStart 为服务的具体运行命令ExecReload 为重启命令ExecStop 为进行命令PrivateTmp=True 示意给服务调配独立的长期空间 留神:[Service] 局部的启动、重启、进行命令全副要求应用绝对路径,应用相对路径则会报错![Install] 是服务装置的相干设置,可设置为多用户的操作流程:1.进入/lib/systemd/systemcd /lib/systemd/system2.创立nginx.servicevi /lib/systemd/system/nginx.service3.nginx.service中增加配置信息 [Unit]Description=nginxAfter=network.target[Service]Type=forkingExecStart=/usr/local/tengine/sbin/nginx #批改为本人零碎对应的门路ExecReload=/usr/local/tengine/sbin/nginx -s reload #批改为本人零碎对应的门路ExecStop=/usr/local/tengine/sbin/nginx -s quit #批改为本人零碎对应的门路PrivateTmp=true[Install]WantedBy=multi-user.target保留退出。 参数解释:Description:形容服务After:形容服务类别[Service]服务运行参数的设置Type=forking是后盾运行的模式ExecStart为服务的具体运行命令ExecReload为重启命令ExecStop为进行命令PrivateTmp=True示意给服务调配独立的长期空间留神:[Service]的启动、重启、进行命令全副要求应用绝对路径[Install]运行级别下服务装置的相干设置,可设置为多用户,即零碎运行级别为3.5.操作命令 systemctl status nginx.service (查看服务以后状态)systemctl start nginx.service (启动nginx服务)systemctl stop nginx.service (进行nginx服务)systemctl restart nginx.service (重新启动服务)systemctl reload nginx.service (从新加载配置)systemctl enable nginx.service (设置开机自启动)systemctl disable nginx.service (进行开机自启动)systemctl list-units --type=service (查看所有已启动的服务)例:查看服务启动状态(已启动状态) 6.参考命令 systemctl start *.service #启动服务systemctl stop *.service #进行服务systemctl restart *.service #重启服务systemctl reload *.service #从新加载服务配置文件systemctl status *.service #查问服务运行状态systemctl enable *.service #开机运行服务systemctl disable *.service #勾销开机运行systemctl --failed #显示启动失败的服务systemctl is-enabled servicename.service #查问服务是否开机启动

May 26, 2021 · 1 min · jiezi

关于nginx:Nginx-常用配置汇总从入门到干活足矣

家喻户晓,Nginx 是 Apache服务不错的替代品。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力在同类型的网页服务器中体现较好,因而国内出名大厂例如:淘宝,京东,百度,新浪,网易,腾讯等等都在应用Nginx网站。 Nginx简介Nginx 是开源、高性能、高牢靠的 Web 和反向代理服务器,而且反对热部署,同时也提供了 IMAP/POP3/SMTP 服务,能够不间断运行,提供热更新性能。占用内存少、并发能力强,最重要的是,Nginx 是收费的并能够商业化,配置应用都比较简单。 Nginx 特点高并发、高性能模块化架构使得它的扩展性十分好异步非阻塞的事件驱动模型这点和 Node.js 类似无需重启可不间断运行热部署、平滑降级齐全开源,生态好Nginx 最重要的几个应用场景:动态资源服务反向代理服务,包含缓存、负载平衡等API 服务,OpenResty所以,明天民工哥就给大家整顿一份 Nginx的罕用配置清单,供大家学习与生产配置参考应用。次要包含以下三个方面: 根底配置高级配置平安配置根底配置去掉不必的 Nginx 模块./configure --without-module1 --without-module2 --without-module3例如:./configure --without-http_dav_module --withouthttp_spdy_module#注意事项:配置指令是由模块提供的。确保你禁用的模块不蕴含你须要应用的指令!在决定禁用模块之前,应该查看Nginx文档中每个模块可用的指令列表。Nginx 版本的平滑降级与回滚1分钟搞定 Nginx 版本的平滑降级与回滚 过程相干的配置worker_processes 8;#Nginx 过程数,倡议依照CPU数目来指定,个别为它的倍数 (如,2个四核的CPU计为8)。worker_rlimit_nofile 65535;  #一个Nginx 过程关上的最多文件描述符数目worker_connections 65535;#每个过程容许的最多连接数监听端口server { listen 80; #监听端口 server_name www.mingongge.com; #域名信息 location / { root /www/www; #网站根目录 index index.html index.htm; #默认首页类型 deny 192.168.2.11; #禁止拜访的ip地址,能够为all allow 192.168.3.44; #容许拜访的ip地址,能够为all } }          小技巧补充:域名匹配的四种写法 准确匹配:server_name www.mingongge.com ;左侧通配:server_name *.mingongge.com ;右侧统配:server_name www.mingongge.* ;正则匹配:server_name ~^www\.mingongge\.*$ ;匹配优先级:准确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配配置 Nginx 状态页面[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf… …location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; }… …[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reloadNginx 日志(拜访与谬误日志治理)error_log /var/log/nginx/error.log warn;#配置谬误日志的级别及存储目录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"'; #配置日志的模式 access_log /var/log/nginx/access.log main; #配置拜访日志存储目录}以上配置只是Nginx本身对于日志的根本配置,在理论生产环境中,咱们须要收集日志、剖析日志,才定更好的去定位问题,举荐给大家:超强干货!通过filebeat、logstash、rsyslog 几种形式采集 nginx 日志 ...

May 24, 2021 · 3 min · jiezi

关于nginx:小试牛刀Nginx-搭建静态资源服务器

明天,来小试牛刀- 应用Nginx 搭建动态资源Web服务器,给大家分享一下全过程。 至于什么是Nginx?Nginx 装置、配置,这样就不再过多的赘述了,废话不多说,直奔主题。 后期筹备筹备一个web动态资源(我用的是之前学习的webgl的例子),先来看看怎么配置nginx: 首先配置listen指令,监听8000端口。接着配置一个location指令块,/示意所有申请,而后配置/后的路由与申请目录下的门路要统一,这时有两种应用办法,alias是其中一种。 listen:申请进入nginx前,首先须要监听端口使得nginx与客户端建设一个tcp链接。listen指令就是用来监听端口的,处于server指令块内的。通过监听的端口与地址就能判断应用哪些server去解决申请。 listen指令值次要分为三种类型: address[:port]-监听一个地址或者加相应的端口。比方listen 127.0.0.1:8000port-监听一个端口。比方listen 8000unix:path-监听一个unix socket地址,只用于本机通信。比方unix:/var/run/nginx.sock而后应用命令重载nginxnginx -s reload,这时拜访localhost:8000就能看到成果了 root与alias:这两个指令次要性能都是将url映射为文件门路,以返回动态文件内容。次要的差异在于: root有一个默认值html,能够呈现在http、server和location指令块内,并且会将残缺的url映射进文件门路中 alias没有默认值,只能呈现在location指令块中,并且只会将location后的url映射到文件门路 举例说明: location /root {    root html}location /alias {    alias html  }当拜访localhost/root/时,依据配置的指令值,会在html后加上/root再去拜访index.html。所以理论拜访的路由地址为localhost/html/root/index.html。这是因为root会将残缺的url映射进文件门路中。 而拜访localhost/alias/时,拜访的路由地址为localhost/html/index.html。 应用gzip压缩来缩小网络传输当拜访的资源很大时,往往会耗费大量的宽带,也减少加载工夫。nginx能够设置动态资源的压缩性能。 gzip on#示意关上gzip性能开关gzip_min_length 1#示意gzip最小压缩字节大小,如果一个文件很小,在一个tcp报文就能发送进去,这时再进行压缩成果不太,却又耗费cpu。(我这是为了演示才设置为1)gzip_comp_level 2#示意压缩级别gzip_types#示意只对列出来的类型进行压缩 压缩后只有830kb,而且在响应头中也能看出应用了gzip压缩 应用autoindex应用autoindex能够将一个目录信息分享给用户,用户依据本人需要关上对应目录。 在文档中介绍到,当拜访/结尾的url时,会对应到这个目录并展现这个目录的构造。应用办法就是把autoindex置为on 拜访css/这个文件夹时: 这里须要提出一点的是,会有一些状况:开启了autoindex后,还是不会返回目录构造。可能是因为配置index指令,index指令优先级会大于autoindex指令。具体如下: index:当拜访/时会返回index指令的文件内容。index file,默认值是index.html,能够呈现在http、server和location指令块中。autoindex:当url以/结尾时,尝试以html/xml/json等格局返回root/alias中指向目录的目录构造限度访问速度因为公网带宽是无限的,当有许多用户同时拜访时,他们是一个加强关系。这时可能须要用户拜访一些大文件时限度访问速度,以确保能有足够的带宽使得其余用户可能拜访一些例如css,js等根底文件。这时能够设置set的命令配合一些内置变量来实现这一个性能。比如说 set $limit_rate 1k;限度服务器向浏览器发送响应的速度。$limit_rate这个变量能够在官网的ngx_http_core_module模块中的Embedded Variables中 用法就是变量前面加上一个以空间为单位的数字,示意每秒传输多少字节。加上限度之后,会发现访问速度有变动。 记录access日志日志要显示什么内容,就要看要设置什么样的格局。应用log_format指令定义日志的格局。 log\_format格局容许设置一个名字,这就能够对不同用处时记录不同格局的日志文件。如图所示,设置为名为main的日志格局。这个格局应用了很多内置变量: $remote_addr:示意远端的ip地址,也就是浏览器的ip地址$remote_user:示意用户名提供根本身份验证$time_local:示意拜访工夫$request:残缺的原始申请行$status:示意响应状态$body_bytes_sent:发送给客户端的body字节数$http_referer:示意从哪跳转过来$http_user_agent:用户浏览器的类别,版本以及操作系统的一些信息$http_x_forwarded_for:客户端申请头中的"X-Forwarded-For"设置完log_format之后,就要去设置日志记录的中央。应用access_log指令。 access_log所在哪个server块中,就示意这类申请的日志都记录在access_log设置的中央; server {     ...     access_log logs/access.log main;} 示意将这个server的申请记录在logs的access.log文件中,采纳main的记录格局 以上就是通应用Nginx来搭建一个动态WEB资源服务器的全过程,非常简单,然而,十分实用。 内容摘自:https://blog.csdn.net/hugo233...

May 23, 2021 · 1 min · jiezi

关于nginx:同源策略引发的跨域问题它都能轻松解决这到底是什么神奇的东西儿

@toc Nginx概念Nginx是一款高性能的HTTP服务器,反向代理服务器及电子邮件(IMAP/POPP3)代理服务器.由俄罗斯的Igor Sysoev所开发,Nginx可能撑持5万并发链接,并且CPU,内存等资源耗费非常低,运行十分稳固 Nginx利用场景HTTP服务器,虚拟主机: Nginx是一个HTTP服务能够独立提供HTTP服务,能够做网页动态服务器,能够实现在一台服务器上虚构出多个网站,例如集体网站应用的虚拟主机反向代理: 当网站的访问量达到肯定水平后,单台服务器不能满足用户申请时,须要用多台服务器集群时能够应用Nginx做反向代理负载平衡: 多台服务器能够均匀分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的状况 HTTP服务器,虚拟主机应用Docker装置运行Nginx,在./conf 里创立nginx.conf文件,配置docker-compose.yml version: '3.1'services: nginx:restart: alwaysimage: nginxcontainer_name: nginxports: - 80:80volumes: - ./conf/nginx.conf:/etc/nginx/nginx.conf - ./wwwroot:/usr/share/nginx/wwwroot虚拟主机: 虚拟主机是一种非凡的软硬件技术.能够将网络上每一台计算机分成多个虚拟主机,每个虚拟主机能够独立对外提供www服务,这样就能实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响的通过Nginx能够实现虚拟主机的配置,Nginx反对三种类型的虚拟主机的配置: 基于IP的虚拟主机基于域名的虚拟主机基于端口的虚拟主机Nginx配置文件构造: 其中每个server就是一个主机 events {}http { server{ } server{ }}基于域名的虚拟主机配置需要: 两个域名指向同一台Nginx服务器,用户拜访不同的域名显示不同的网页内容两个域名是admin.service.itoken.oxford.com和admin.web.itoken.oxford.comNginx服务器应用虚拟机192.168.32.255配置 Windows Hosts文件: 批改window的hosts文件(C:/Windows/System32/drivers/etc)-SwitchHosts通过host文件指定admin.service.itoken.oxford.com和admin.web.itoken.oxford.com对应192.168.32.255虚拟机创立目录及文件: 在 /usr/local/docker/nginx/wwwroot目录下创立htmlservice和htmlweb两个目录,并别离创立index.html文件配置虚拟主机: 批改 /usr/local/docker/nginx/conf目录下的nginx.conf配置文件 user nginx;worker_processes 1;events { worker_connections 1024;}http{ include mime.type; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server{ listen 80; server_name admin.service.itoken.oxford.com # 所有的申请都是以 / 开始,所有的申请都能够匹配此location location / { root /usr/local/docker/nginx/wwwroot/htmlservice; # 指定欢送页面,按从左到右程序查找 index index.html index.htm; } } server{ listen 80; server_name admin.web.itoken.oxford.com location / { root /usr/share/nginx/wwwroot/htmlweb; index index.html index.htm; } } }基于端口的虚拟主机配置需要: ...

May 21, 2021 · 2 min · jiezi

关于nginx:supervisor相关操做

一、定义:Supervisor在百度百科上给的定义是超级用户,监管员。Supervisor是一个过程管理工具,当过程中断的时候Supervisor能主动重新启动它。能够运行在各种类unix的机器上,supervisor就是用Python开发的一套通用的过程管理程序,能将一个一般的命令行过程变为后盾daemon,并监控过程状态,异样退出时能主动重启。二、介绍Supervisor supervisord运行 Supervisor 时会启动一个过程 supervisord,它负责启动所治理的过程,并将所治理的过程作为本人的子过程来启动,而且能够在所治理的过程呈现解体时主动重启。 supervisorctl是命令行管理工具,能够用来执行 stop、start、restart 等命令,来对这些子过程进行治理。supervisor是所有过程的父过程,治理着启动的子停顿,supervisor以子过程的PID来治理子过程,当子过程异样退出时supervisor能够收到相应的信号量。三、装置Supervisor1、yum装置:yum install supervisor 2、python装置:yum install python-setuptools,easy_install supervisor3、下载包装置 wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gztar zxvf supervisor-3.1.3.tar.gzcd supervisor-3.1.3python setup.py install四、查看是否装置胜利执行命令 echo_supervisord_conf 输入主配置文件内容五、初始化配置文件 mkdir /usr/supervisorecho_supervisord_conf > /usr/supervisor/supervisord.conf主配置文件解释 [root@centos-011 ~ 07:50:00]#cat /etc/supervisord.conf.bak; Sample supervisor config file. [unix_http_server]file=/var/run/supervisor/supervisor.sock ; socket 门路 ;chmod=0700 ; socket 文件的权限;chown=nobody:nogroup ; socket 所属用户及组;username=user ; 用户名;password=123 ; 明码 ;[inet_http_server] ; 是否启用服务,默认是敞开的(启用的话能够看到supervisor 治理的服务状态);port=127.0.0.1:9001 ; 监听的IP及端口;username=user ; 用户名;password=123 ; 明码 [supervisord] ; supervisord 全局配置logfile=/var/log/supervisor/supervisord.log ; supervisor 日志门路logfile_maxbytes=50MB ; 单个日志文件最大数logfile_backups=10 ; 保留多少个日志文件(默认10个)loglevel=info ; (log level;default info; others: debug,warn,trace)pidfile=/var/run/supervisord.pid ; pid 文件门路nodaemon=false ; 启动是否丢到前台,设置为false ,示意以daemon 的形式启动minfds=1024 ; 最小文件关上数,对应零碎limit.conf 中的nofile ,默认最小为1024,最大为4096minprocs=200 ; 最小的过程关上数,对应零碎的limit.conf 中的nproc,默认为200;umask=022 ; (process file creation umask;default 022);user=chrism ; 启动supervisord 服务的用户,默认为root;identifier=supervisor ; (supervisord identifier, default is 'supervisor');directory=/tmp ; 这里的目录指的是服务的工作目录;nocleanup=true ; (don't clean up tempfiles at start;default false);childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP);environment=KEY=value ; (key value pairs to add to environment);strip_ansi=false ; (strip ansi escape codes in logs; def. false) ; the below section must remain in the config file for RPC; (supervisorctl/web interface) to work, additional interfaces may be; added by defining them in separate rpcinterface: sections[rpcinterface:supervisor]supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl]serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket;username=chris ; should be same as http_username if set;password=123 ; should be same as http_password if set;prompt=mysupervisor ; cmd line prompt (default "supervisor");history_file=~/.sc_history ; use readline history if available ; The below sample program section shows all possible program subsection values,; create one or more 'real' program: sections to be able to control them under; supervisor. ;[program:theprogramname] ; 定义一个守护过程 ,比方上面的elasticsearch ;command=/bin/cat ; 启动程序应用的命令,能够是绝对路径或者相对路径;process_name=%(program_name)s ; 一个python字符串表达式,用来示意supervisor过程启动的这个的名称,默认值是%(program_name)s;numprocs=1 ; Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须蕴含%(process_num)s,默认是1;directory=/tmp ; supervisord在生成子过程的时候会切换到该目录;umask=022 ; umask for process (default None);priority=999 ; 权重,能够控制程序启动和敞开时的程序,权重越低:越早启动,越晚敞开。默认值是999;autostart=true ; 如果设置为true,当supervisord启动的时候,过程会主动启动;autorestart=true ; 设置为随 supervisord 重启而重启,值能够是false、true、unexpected。false:过程不会主动重启;startsecs=10 ; 程序启动后期待多长时间后才认为程序启动胜利,默认是10秒;startretries=3 ; supervisord尝试启动一个程序时尝试的次数。默认是3;exitcodes=0,2 ; 一个预期的退出返回码,默认是0,2。;stopsignal=QUIT ; 当收到stop申请的时候,发送信号给程序,默认是TERM信号,也能够是 HUP, INT, QUIT, KILL, USR1, or USR2;stopwaitsecs=10 ; 在操作系统给supervisord发送SIGCHILD信号时期待的工夫;user=chrism ; 如果supervisord以root运行,则会应用这个设置用户启动子程序;redirect_stderr=true ; 如果设置为true,过程则会把规范谬误输入到supervisord后盾的规范输入文件描述符;stdout_logfile=/a/path ; 把过程的规范输入写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会主动抉择一个文件地位;stdout_logfile_maxbytes=1MB ; 规范输入log文件达到多少后主动进行轮转,单位是KB、MB、GB。如果设置为0则示意不限度日志文件大小;stdout_logfile_backups=10 ; 规范输入日志轮转备份的数量,默认是10,如果设置为0,则不备份;stdout_capture_maxbytes=1MB ; 当过程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位能够是KB、MB、GB;stdout_events_enabled=false ; 如果设置为true,当过程在写它的stderr;stderr_logfile=/a/path ; 把过程的谬误日志输入一个文件中,除非redirect_stderr参数被设置为true;stderr_logfile_maxbytes=1MB ; 谬误log文件达到多少后主动进行轮转,单位是KB、MB、GB。如果设置为0则示意不限度日志文件大小;stderr_logfile_backups=10 ; 谬误日志轮转备份的数量,默认是10,如果设置为0,则不备份;stderr_capture_maxbytes=1MB ; 当过程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位能够是KB、MB、GB;stderr_events_enabled=false ; 如果设置为true,当过程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发;environment=A=1,B=2 ; 一个k/v对的list列表;serverurl=AUTO ; 是否容许子过程和外部的HTTP服务通信,如果设置为AUTO,supervisor会主动的结构一个url ; The below sample eventlistener section shows all possible; eventlistener subsection values, create one or more 'real'; eventlistener: sections to be able to handle event notifications; sent by supervisor. #这个中央是自定义一个守护过程[program:elasticsearch] ; 定义一个守护过程 elasticsearchenvironment=ES_HOME=/usr/local/elasticsearch ; 设置ES_HOME 环境变量user=elk ; 启动elasticsearch 的用户directory=/usr/local/elasticsearch ; 进入到这个目录中command=/usr/local/elasticsearch/bin/elasticsearch ; 执行启动命令numprocs=1 ; Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须蕴含%(process_num)s,默认是1autostart=true ; 设置为随 supervisord 启动而启动autorestart=true ; 设置为随 supervisord 重启而重启startretries=3 ; 设置elasticsearch 重启的重试次数priority=1 ; 权重,能够控制程序启动和敞开时的程序,权重越低:越早启动,越晚敞开。默认值是999 ;[eventlistener:theeventlistenername];command=/bin/eventlistener ; the program (relative uses PATH, can take args);process_name=%(program_name)s ; process_name expr (default %(program_name)s);numprocs=1 ; number of processes copies to start (def 1);events=EVENT ; event notif. types to subscribe to (req'd);buffer_size=10 ; event buffer queue size (default 10);directory=/tmp ; directory to cwd to before exec (def no cwd);umask=022 ; umask for process (default None);priority=-1 ; the relative start priority (default -1);autostart=true ; start at supervisord start (default: true);autorestart=unexpected ; restart at unexpected quit (default: unexpected);startsecs=10 ; number of secs prog must stay running (def. 1);startretries=3 ; max # of serial start failures (default 3);exitcodes=0,2 ; 'expected' exit codes for process (default 0,2);stopsignal=QUIT ; signal used to kill process (default TERM);stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10);user=chrism ; setuid to this UNIX account to run the program;redirect_stderr=true ; redirect proc stderr to stdout (default false);stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB);stdout_logfile_backups=10 ; # of stdout logfile backups (default 10);stdout_events_enabled=false ; emit events on stdout writes (default false);stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB);stderr_logfile_backups ; # of stderr logfile backups (default 10);stderr_events_enabled=false ; emit events on stderr writes (default false);environment=A=1,B=2 ; process environment additions;serverurl=AUTO ; override serverurl computation (childutils) ; The below sample group section shows all possible group values,; create one or more 'real' group: sections to create "heterogeneous"; process groups. ;[group:thegroupname] ; 服务组治理,能够将多个服务名写到这里治理(组名自定义);programs=progname1,progname2 ; 下面配置好的服务名,比方elasticsearch,kibana,logstash;priority=999 ; the relative start priority (default 999) ; The [include] section can just contain the "files" setting. This; setting can list multiple files (separated by whitespace or; newlines). It can also contain wildcards. The filenames are; interpreted as relative to this file. Included files *cannot*; include files themselves. [include]files = supervisord.d/*.ini六、自定义配置文件1、自定义文件寄存地位mkdir /usr/supervisor/supervisord.d/2、include自定义配置文件 ...

May 18, 2021 · 4 min · jiezi

关于nginx:正向代理和反向代理总结

正向代理和反向代理的总结

May 12, 2021 · 1 min · jiezi

关于nginx:Nginx流量复制

1. 需要将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多益处,比方: 能够验证性能是否失常,以及服务的性能;用真实有效的流量申请去验证,又不必造数据,不影响线上失常拜访;这跟灰度公布还不太一样,镜像流量不会影响实在流量;能够用来排查线上问题;重构,如果服务做了重构,这也是一种测试形式;为了实现流量拷贝,Nginx提供了ngx_http_mirror_module模块2. 源码装置yum装置没有蕴含咱们所需的ngx_http_mirror_module模块,因而,真正要应用的时候最好还是采纳自定义装置,即从源码构建首先,下载源码 http://nginx.org/en/download....接下来,编译装置,例如: ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --without-http_limit_req_module --without-http_mirror_module --with-pcre=../pcre-8.43 --with-zlib=../zlib-1.2.11 --add-module=/path/to/ngx_devel_kit --add-module=/path/to/lua-nginx-modulemake & make install3. 配置upstream api.abc.com { server 127.0.0.1:8080;}upstream tapi.abc.com { server 127.0.0.1:8081;}server { listen 80; # 源站点 location /api { proxy_pass http://api.cjs.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 流量复制 mirror /newapi; mirror /mirror2; mirror /mirror3; # 复制申请体 mirror_request_body on; } # 镜像站点 location /tapi { proxy_pass http://tapi.cjs.com$request_uri; proxy_pass_request_body on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}4. 文档Nginx文档http://nginx.org/en/docs/ http://nginx.org/en/docs/http... http://nginx.org/en/docs/begi...http://nginx.org/en/docs/http...http://nginx.org/en/docs/conf...

May 11, 2021 · 1 min · jiezi

关于nginx:Nginx如何配置HttpHttpsWSWSS

写在后面当今互联网畛域,Nginx是应用最多的代理服务器之一,很多大厂在本人的业务零碎中都是用了Nginx作为代理服务器。所以,咱们有必要理解下Nginx对于Http、Https、WS、WSS的各项配置。来来来,跟冰河一些学习Nginx,一起进阶,一起头秃~~Nginx配置Http首先,咱们来聊聊Nginx如何配置Http,Nginx配置Http是Nginx最罕用的性能之一。在nginx.conf中配置相应的信息,如下所示。 upstream message { server localhost:8080 max_fails=3;}server { listen 80; server_name localhost; location / { root html; index index.html index.htm; #容许cros跨域拜访 add_header 'Access-Control-Allow-Origin' '*'; #proxy_redirect default; #跟代理服务器连贯的超时工夫,必须注意这个time out工夫不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。 proxy_connect_timeout 10; } location /message { proxy_pass http://message; proxy_set_header Host $host:$server_port; }}此时,拜访 http://localhost/message,就会被转发到 http://localhost:8080/message 上。 Nginx配置Https如果业务对于网站的安全性要求比拟高,此时可能就会在Nginx配置Https,具体配置信息能够参照如下形式进行。 upstream message { server localhost:8080 max_fails=3;}server { listen 443 ssl; server_name localhost; ssl_certificate /usr/local/nginx-1.17.8/conf/keys/binghe.pem; ssl_certificate_key /usr/local/nginx-1.17.8/conf/keys/binghe.key; ssl_session_timeout 20m; 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; ssl_verify_client off; location / { root html; index index.html index.htm; #容许cros跨域拜访 add_header 'Access-Control-Allow-Origin' '*'; #跟代理服务器连贯的超时工夫,必须注意这个time out工夫不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。 proxy_connect_timeout 10; } location /message { proxy_pass http://message; proxy_set_header Host $host:$server_port; }}此时拜访https://localhost/message 就会被转发到 http://localhost:8080/message上。 ...

May 10, 2021 · 2 min · jiezi

关于nginx:Nginx-代理服务器

Nginx-代理服务器 作者 | WenasWei 一 Nginx代理服务器1.1 Nginx简介Nginx 是一款高性能的 HTTP 服务器/反向代理服务器及 IMAP/POP3/SMTP 代理服务器。由俄罗斯的程序设计师 Igor Sysoev 所开发,官网测试 Nginx 可能支撑持 5 万并发链接,并且 CPU、内存等资源耗费却非常低,运行十分稳固。 Nginx 代码齐全用C语言从头写成,以事件驱动的形式编写,所以有十分好的性能,同时也是一个十分高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能反对更多的并发连贯,达到更高的拜访效率;在性能上,Nginx是优良的代理服务器和负载平衡服务器;在装置配置上,Nginx安装简单、配置灵便。 截至2019年12月,差不多世界上每3个网站中就有1个应用 Nginx。 Nginx反对热部署,启动速度特地快,还能够在不间断服务的状况下对软件版本或配置进行降级,即便运行数月也无需重新启动。 在微服务的体系之下,Nginx正在被越来越多的我的项目采纳作为网关来应用,配合Lua做限流、熔断等管制。 1.2 Nginx 的利用场景(1)HTTP 服务器:Nginx 是一个 HTTP 服务能够独立提供 HTTP 服务。能够做网页动态服务器。(2)虚拟主机:能够实现在一台服务器虚构出多个网站。例如集体网站应用的虚拟主机。(3)反向代理,负载平衡:当网站的访问量达到肯定水平后,单台服务器不能满足用户的申请时,须要用多台服务器集群能够应用 Nginx 做反向代理。并且多台服务器能够均匀分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的状况。二 Nginx 常用命令2.1 Linux 下 Nginx常用命令nginx 的应用比较简单,就是几条命令。 nginx -s stop #疾速敞开Nginx,可能不保留相干信息,并迅速终止web服务。nginx -s quit #安稳敞开Nginx,保留相干信息,有安顿的完结web服务。nginx -s reload #因扭转了Nginx相干配置,须要从新加载配置而重载。nginx -s reopen #从新关上日志文件。nginx -c filename #为 Nginx 指定一个配置文件,来代替缺省的。nginx -t #不运行,而仅仅测试配置文件。nginx将查看配置文件的语法的正确性,并尝试关上配置文件中所援用到的文件。nginx -v #显示 nginx 的版本。nginx -V #显示 nginx 的版本,编译器版本和配置参数。在linux的sbin目录下中输出:./nginx 代替下面的 nginx ...

May 7, 2021 · 6 min · jiezi

关于nginx:了解代理服务器

代理服务器-Docker部署Nginx反向代理 作者 | WenasWei 一 什么是代理服务器代理服务器(Proxy Server)的性能是代理网络用户去获得网络信息。形象地说,它是网络信息的中转站,是集体网络和Internet服务商之间的两头代理机构,负责转发非法的网络信息,对转发进行管制和注销。 代理服务器作为连贯 Internet 与 Intranet 的桥梁,在理论利用中施展着极其重要的作用,它可用于多个目标,最根本的性能是连贯,此外还包含安全性、缓存、内容过滤、访问控制治理等性能。更重要的是,代理服务器是Internet链路级网关所提供的一种重要的平安性能,它的工作次要在开放系统互联(OSI)模型的对话层。 代理服务器,客户机在发送申请时,不会间接发送给目标主机,而是先发送给代理服务器,代理服务承受客户机申请之后,再向主机收回,并接管目标主机返回的数据,寄存在代理服务器的硬盘中,再发送给客户机。 二 代理服务器次要性能代理服务器次要性能如下: 缓存性能: 能够升高费用,进步访问速度防火墙作用: 对进入外部网络的Internet信息施行监控和过滤通过代理服务器访问不能拜访的指标站点一个iP地址或Internet帐户供多个用户同时应用对外部网络用户进行权限和信息流量计费治理2.1 缓存性能能够升高带宽费用,进步访问速度, 因为指标主机返回的数据会寄存在代理服务器的硬盘中,因而下一次客户再拜访雷同的站点数据时,会间接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高申请速度。 2.2 防火墙作用因为所有的客户机申请都必须通过代理服务器拜访近程站点,因而可在代理服务器上设限,过滤某些不平安信息。 为了防止那些与业务无关的信息进入外部网络节约通信资费,各个机构对容许拜访的内容往往有一些相应的规定。通过代理服务器,网管员岂但能够采取过滤的办法简便地管制从 Internet 流入外部网络的信息内容,还能对用户拜访 Internet 的状况进行实时监控和建设监查日志存档备查。 2.3 通过代理服务器访问不能拜访的指标站点互联网上有许多凋谢的代理服务器,客户机在拜访受限时,可通过不受限的代理服务器拜访指标站点,艰深说,咱们应用的翻墙浏览器就是利用了代理服务器,尽管不能出国,但也可间接拜访外网。 2.4 一个iP地址或Internet帐户供多个用户同时应用IPv4应用32位(4字节)地址,因而地址空间中只有4,294,967,296(2)个地址。在2011年2月3日,在最初5个地址块被调配给5个区域互联网注册管理机构之后,IANA的次要地址池曾经用尽。 在目前状况下,IP 地址是 Internet 中无限的贵重资源,如果将这些IP地址仅仅用于单个的申请 Internet 拜访的用户,不能不说是一种资源节约。应用代理服务器能够做到通过一个IP同时向多个用户提供 Internet 的拜访,对于通过电话拨号连通 Internet 的外部网络,则能够实现利用一条电话线,一个 modem 和一个 Internet 帐户,让外部网络上所有用户同时拜访 Internet,这样就充分利用了 IP 地址资源。 2.5 对外部网络用户进行权限和信息流量计费治理为了防止那些与业务无关的信息进入外部网络节约通信资费,各个机构对容许拜访的内容往往有一些相应的规定。通过代理服务器,网管员岂但能够采取过滤的办法简便地管制从Internet流入外部网络的信息内容,还能对用户拜访Internet的状况进行实时监控和建设监查日志存档备查。 三 正向代理与反向代理3.1 正向代理正向代理,架设在客户机与指标主机之间,只用于代理外部网络对 Internet 的连贯申请,客户机必须指定代理服务器,并将原本要间接发送到 Web 服务器上的 Http 申请发送到代理服务器中。 正向代理的用处: -(1)拜访原来无法访问的资源,如google -(2) 能够做缓存,减速拜访资源 -(3)对客户端拜访受权,上网进行认证 -(4)代理能够记录用户拜访记录(上网行为治理),对外暗藏用户信息 3.2 反向代理反向代理服务器架设在服务器端,通过缓冲常常被申请的页面来缓解服务器的工作量,将客户机申请转发给外部网络上的指标服务器;并将从服务器上失去的后果返回给 Internet 上申请连贯的客户端,此时代理服务器与指标主机一起对外体现为一个服务器。 ...

May 1, 2021 · 2 min · jiezi

关于nginx:五nginx-入门nginx-Http-服务器

HTTP 服务器次要是在客户端向其发送申请时 向客户端投递网页的 个软件 。 Nginx 的零碎架构HTTP 外围模块应用 limits 避免滥用。束缚拜访。流媒体文件。预约义变血。SPDY 矛口 HTTP/2应用 Nginx PHP-FPMNginx uWSGI 联合。一、Nginx零碎架构 nginx 蕴含一个繁多的master过程和多个worker过程。所有这些过程都是单线程,并且设计为同时解决成千上万个连贯。worker过程是解决连贯的中央,这个组件用于解决客户端申请的。Nginx 应用了操作系统事件机制来疾速响应这些申请。master过程负责读取配置文件、解决套接字、派生worker过程、关上日志文件和编译嵌入式的perl脚本。Nginx建设在一个模块化的形式之上,各个模块链接在 起成为 个管道来解决连贯和申请。二、HTTP外围模块 http模块是Nginx的外围模块,通过http解决客户端的所有交互。1、server指令作用:开始一个新的上下文,例一、两个server_name代表的意义统一 server { listen 127.0.0.1:80; server_name default.example.com; server_name_in_redirect on; #在该 Context 中,对任何由 Nginx 公布的重定向,该指令都应用Server name 指令的第 个值来激活} server { listen 127.0 . 0.1:80; server_name www.example.com;}例二、解决没有host的 server { server name ””;}2、Nginx中的日志 log_format指令容许你明确指定记录要记在的内容http { log_format vhost host $remote_addr - $remote_user [$time_local ]’’”$request ”$status $body_bytes_sent ’ ’”$http_referer””$http_user_agent ”’; # 地址-用户名-本地工夫( %d /%b/%Y %H%M:%S %z)-申请信息 -该变量指定响应状态-该变量指定发送到客户端的字节数,不包含响应头 log_format downloads ’ $time_iso8601 $host $remote_addr ’’” $request "$status $body_bytes_sent $request_ time ’; open_log_file_cache max=lOOO inactive=60s; access_ log logs/access.log; server { server_name ~< (WWW\ • ) ? ( . + ) $ ; access_ log logs/combined.log vhost; access_log logs/$2/access .log; location /downloads { access_log logs/downloads.log downloads; } }}3、查找文件 ...

April 27, 2021 · 3 min · jiezi

关于nginx:四nginx入门反向代理高级安全隔离

1、问:ssh工具与linux服务器应用的是什么协定进行通信? 应用的是ssh协定,Secure Shell Protocol的简写,由IETF网络工作小组制订,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密解决,加密后再进行数据传输。SSH是专为近程登录会话和其余网络服务提供的安全性协定,利用SSH协定能够无效的避免远程管理过程中的信息泄露问题,比telnet协定平安。 2、问:啥是ssl?(Secure Sockets Layer)中文平安链路层,用以保障在Internet上数据传输之平安,利用数据加密技术,可确保数据在网络上之传输过程中不会被截取及窃听。个别通用之规格为40 bit之平安规范,美国则已推出128 bit之更高平安规范,但限度入境。 一、应用ssl对流量进行加密 Nginx 常常被用于终结 SSL 连贯,可能是因为上游服务器不能应用 SSL 或者是按照要求卸载 SSL 连贯。要应用 SSL 就须要在编译装置 Nginx 时在 Nginx 进制文件中增加对SSL 的反对(--with_http_ ssl_ module ),并且要装置 SSL 证书和密钥。 server { listen 443 default ssl; #开启ssl模块 server_name www.example.com; #指定了心愿客户宣增应用的服务器明码列表。 ssl_prefer_server_ciphers on; ssl__protocols TLSvl SSLv3; sslciphers RC4:HIGH: !aNULL: !MDS:@STRENGTH; ssl_session_cache shared:WEB:lOm; ssl_certificate /usr/local/etc/nginx/www.example.com.crt; #证书 ssl_certificate_key /usr/local/etc/nginx/www.example.com.key; #秘钥地位 location / { proxy set header X-FORWARDED-PROTO https; #咱们将 X-FORW. DED-PROTO 头的值设置为 ,是为了运行在上游服务器上的利用相芋可能意识到原始申请应用了 H凹的事实 proxy_pass http://upstream; }}二、应用 SSL 进行客户端身份验证 ...

April 27, 2021 · 1 min · jiezi

关于nginx:三nginx入门负载均衡

1、三种负载 轮询:ip_hash:将某些 IP 地址映射到同一个上游服务器。 Nginx 通过 IPV4 地址的前 3个字节或者整个IPV6 地址作为哈希键来实现。同一个IP 地址池 址总是被映射到同 个上游服务器 所以,这个机制的目标不是要确保公平调配给每 台上游服务器,而是在客户端和上游服务器之间实现 致映射 在上游服务器中,这在本地跟踪用户会话的状况下十分有用。 起码连接数:上游服务器默认 2、location中if的应用 1)、正则表达式匹配: ==:等值比拟; ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时辨别字符大小写; ~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不辨别字符大小写;!~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时辨别字符大小写;!~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不辨别字符大小写; 2)、文件及目录匹配判断: -f, !-f:判断指定的门路是否为存在且为文件; -d, !-d:判断指定的门路是否为存在且为目录; -e, !-e:判断指定的门路是否存在,文件或目录均可; -x, !-x:判断指定门路的文件是否存在且可执行; 例子: if (!-f $request_filename) { #申请的文件不存在,就反向代理 proxy_pass http://127.0.0.1:8084; break; }}将*.php转到tingfu.htmlif ( $my_ip != 1) { rewrite ^/design/(.*)\.php$ /tingfu.html?$1&;} 3、拜访谬误端口则返回nginx中Html下的文件 error_page 500 502 503 504 /50x.html; location = /50x.html { root html;}

April 27, 2021 · 1 min · jiezi

关于nginx:二nginx入门代理上游服务器

正向代理它的上游是客户端,如它的指标就是通过申请获取返回值。反向代理的上游是服务器,依据url 来匹配散发申请,匹配到后能够指定对应服务器的uri去进行解决location 中的配置优先级 > server部分配置优先级1、无关配置 有用到: proxy_pass 该指令有一个参数, URL申请将会被转换rewrite (改写)两个例外:1、当location 匹配应用了正则去匹配时会间接代理到匹配到的url的地址,而不会在通过proxy_pass进行传递2、 挡在 location中应用 rewrite 的话优先应用rewrite改写的url,break示意立刻进行rewrite 模块的所有指令。例:location ~</local { proxy_pass http://localhost:8080; }location / { rewrite /(.*)$/ index.php?page=$1 break; proxy_pass http://localhost:8080;}proxy_pass_request_body 如果设置为 off, 那么该指令将会阻止申请体发送到上游服务器proxy_pass_request_headers 如果设置为 off, 该指令则会阻止申请头发送到上游服务器proxy_read_timeout 该指令给出连贯敞开前从上游服务器两次胜利的读操作耗时 如果上游服务器解决申请比较慢,那么该指令应该将该值设置得高一些proxy_send_timeout 该指令指定在连贯敞开之前,向上游服务器两次写胜利的操作实现所需的工夫长度proxy_set_header 该指令重写申请头,将申请头的信息发送到上游服务器头的内容,能够通过它将某个头的值置空没有用到proxy_redirect 该指令重写来自于上游服务器的location和refresh头,这对于某种利用框架十分有用proxy_set_body 发送到上游服务器的申请体可能会被该指令批改proxy_temp_file_write_size 该指令限度在同 工夫内缓冲到 个临时文件的数据量 以使得Nginx 不会过长地阻止单个申请proxy_temp_path 该指令设定临时文件的缓冲 用于缓冲从上游服务器来的文件,能够设定目录的档次 例子: proxy_redirect off; #敞开对location头的重写proxy_set_header Host $host ; #将申请头中Host 申请头的值发送到服务器,proxy_set_header Host $host:$proxy_port; $host:$proxy_port 示意服务器名称和端口一起传递proxy_set_header X-Real-IP $remote_addr; #传递客户端ipproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; client_max_body_size lOm ; #客户端上传文件限度。不能超过限度client_body_buffer_size 128k; proxy_connect_timeout 30 ; #与上游服务器建设连贯时nginx等带是长单位Sproxy_send_timeout 15 ; proxy_read_timeout 15; #send和read 指令定义了 Nginx 上游服务器连贯胜利的两次操作期待的工夫。proxy_send_lowat 12000; #在 FreeBSD 零碎下无效,并且在该协定下传输数据之前指定套接字发送缓冲应该包容的字节数。proxy_buffer_size 4k; #这些缓冲管制了 Nginx 如何疾速地响应用户的申请。proxy_buffers 32 4k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; #指令管制 worker 程阻塞后盾数据的工夫。值越大,解决阻塞的工夫越长。2、upstream模块 ...

April 27, 2021 · 1 min · jiezi

关于nginx:一nginx入门Nginx-的安装和配置指南

Nginx 是一台高性能 Web 服务器,它应用了非常少的系统资源。 一、装置1、装置centos中装置ngnix 1、应用rpm来装置sudo yum install nginx2、编译二进制版本来装置sudo vi /etc/yum.repos.d/nginx.repo执行装置sudo yum install nginx二、配置指南 根本配置格局。Nginx 全局配置参数应用 include 文件。HTTP 的 server 局部虚构服务器局部。location一一-where, when, howmail的serer 局部。残缺的示例配置文件。1、Nginx 全局配置参数 全局配置:就是设置对整个ngnix所有中央都失效的配置 例: user nobody; #配置用户和组worker_processes 1; #容许生成的过程数,默认为1 error_log logs/error.log; #谬误日志门路。error_log logs/error.log notice; #谬误日志门路,告诉级别。error_log logs/error.log info; #谬误日志门路,信息级别。error_log logs/error.log debug; #谬误日志门路,debug级别批改编译时进行配置。pid logs/nginx.pid; #指定 nginx 过程运行文件寄存地址 events { use /dev/proll #事件驱动模型select|poll|kqueue|epoll|resig worker_connections 1024; #最大连接数,默认为512}2、应用 include 文件。 http { include mime.types; #文件扩展名与文件类型映射表 server {}}mime.types文件内容 types { text/html html htm shtml; text/css css; text/xml xml; 等等 }3、HTTP 的 server 局部 ...

April 27, 2021 · 1 min · jiezi

关于nginx:nginx和uwsgi部署Django项目

一、防火墙和端口设置开启防火墙:systemctl start firewalld敞开防火墙:systemctl stop firewalld查看防火墙状态:systemctl status firewalld重启防火墙:systemctl restart firewalld设置开机自启:systemctl enable nginx firewalld查看凋谢端口列表:firewall-cmd --list-ports凋谢指定的端口:firewall-cmd --zone=public --add-port=端口号/tcp --permanent 须要留神的是:凋谢端口之后须要重启防火墙能力失效二、我的项目环境装置依赖装置 yum install python3-devel zlib-devel mysql-devel libffi-devel bzip2-devel openssl-devel java wget gcc装置nginx yum install nginx装置redis和mysql yum install mysql-serveryum install redis装置python过程管理工具supervisor yum install python3-devel zlib-devel mysql-devel libffi-devel bzip2-devel openssl-devel java wget gcc设置开机启动 systemctl enable redis mysqld nginx supervisord留神: mysql装置之后默认不会启动,须要应用systemctl start mysqld.service来启动,或者mysqld.service替换为mysqld设置开机自启动时是mysqld和supervisord,不是mysql和supervisor装置python3.7 下载源码包:wget https://www.python.org/ftp/py...解压:tar -xf Python-3.7.8rc1.tar.xz在/usr/local下新建python3目录,用于装置python3.7.8进入python3.7.8源码包装置:./configure --prefix=/usr/local/python3 --enable-optimizations执行命令:make && make install,吐过上一步增加了--enable-optimizations,这一步会比拟耗时间,这个参数能够不加把python3和pip3软连贯到/usr/bin上: 软连贯python3:ln /usr/local/python3/bin/python3 /usr/bin/python3软连贯pip3:ln /usr/local/python3/bin/pip3 /usr/bin/pip3问题:应用pip3 install -r requirements.txt装置依赖时,报错:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-ifh_bc24/cryptography/解决办法:命令行pip3 install --upgrade setuptools,而后重试三、Django部署中nginx设置nginx配置文件 ...

April 26, 2021 · 2 min · jiezi

关于nginx:通过nginx自建github加速debianubuntucentos镜像源

转载留作备份:转载起源:https://run.la/s/169.html 贴一份本人反向代理减速国外网站,次要代理github和一些源。server{ listen 443 ssl http2 reuseport; #http2 示意启用http2协定,http2个别须要openssl 1.0.2+以上版本反对,大部分linux零碎须要自行编译nginx作为反对,ubuntu16.04能够间接反对。 listen 80 reuseport; #同时监听80端口。 #reuseport进步nginx性能,有趣味能够搜索引擎 location ~* .(conf|sql|bak)$ { deny all; } ssl_certificate ssl/p.run.la.pem; ssl_certificate_key ssl/p.run.la.key; ssl_certificate ssl/p.run.la.ecdsa.pem; ssl_certificate_key ssl/p.run.la.ecdsa.key; #配置双证书,一个是rsa算法的证书,一个是ecc,ecc算法效率更高,然而并不反对某些老的零碎。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #配置加密协议,如果要反对ie6还须要加上SSLv3,然而安全性会升高 ssl_session_timeout 1d; #缓存工夫 ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5; #配置https加密算法,chacha20对称算法耗费更少,对于挪动端更敌对,然而须要自行编译nginx,打Cloudflare 补丁。 ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; #配置ssl缓存 ssl_stapling on; #开启OCSP,因为Let's Encryptc证书的起因,我开启ocsp无需更多设置。 server_name p.run.la; #绑定的域名 if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } #屏蔽搜索引擎 resolver 8.8.8.8 8.8.4.4 valid=600s; #设置域名解析的dns服务器 resolver_timeout 10s; #设置dns解析超时工夫。 location ~ ^/(repo\.mongodb\.com|repo\.mysql\.com|www\.debian\.org|deb\.debian\.org|security\.debian\.org|cdn-fastly\.deb.debian\.org|nginx\.org|github\.com|codeload\.github\.com|yum\.dockerproject\.org)(\/.*)$ { #须要代理的域名正则,防止有人用来代理某些被墙的网站,导致反向代理被gfw误杀,会的人本人改改就能够反向代理所有网站了,其实在通过sub_filter替换链接能够做到拜访大部分网站,然而当初有份写好的,因为某VPS商,导致数据丢了,有趣味的能够本人试着填一下。 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #将用户ip放到申请协定头内,个别用来通知后端服务器,是谁拜访的网站。 proxy_set_header Accept-Encoding ""; #通知被代理网站,不要压缩内容,否则sub_filter会生效。 proxy_set_header Connection ""; #启用http1.1协定 proxy_http_version 1.1; #同上 proxy_connect_timeout 10s; #设置连贯超时 proxy_read_timeout 10s; #设置读取超时 proxy_set_header Host $1; #设置host,域名 proxy_redirect ~^(http:\/\/|https:\/\/)?(.*)$ $1$server_name/$2; #将原301跳转,从新跳转回本域名。 sub_filter 'src="/' 'src="/$1/'; sub_filter 'src="http://$1' 'src="http://$server_name/$1'; sub_filter 'src="https://$1' 'src="https://$server_name/$1'; sub_filter 'src="//$1' 'src="//$server_name/$1'; #替换网页内链接地址。 sub_filter 'href="/' 'href="/$1/'; sub_filter 'href="http://$1' 'href="http://$server_name/$1'; sub_filter 'href="https://$1' 'href="https://$server_name/$1'; sub_filter 'href="//$1' 'href="//$server_name/$1'; #同上 sub_filter 'action="/' 'action="/$1/'; sub_filter 'action="http://$1' 'action="http://$server_name/$1'; sub_filter 'action="https://$1' 'action="https://$server_name/$1'; sub_filter 'action="//$1' 'action="//$server_name/$1'; #同上 sub_filter_once off; #替换屡次 proxy_hide_header Strict-Transport-Security; #暗藏被代理网站返回回来的协定头“Strict-Transport-Security”,防止启动hsts,具体搜索引擎hsts set $query_mark ""; if ($query_string != "") { set $query_mark "?${query_string}"; } #因为nginx并不匹配url前面的?参数,而是应用“$query_string”贮存。 proxy_pass $scheme://$1$2${query_mark}; #$scheme是以后拜访的协定,http、https } root /home/wwwroot/p.run.la; #设置目录。}配置完后就能够应用https://域名/github.com/,拜访github了,比方https://p.run.la/github.com/

April 26, 2021 · 1 min · jiezi

关于nginx:Nginx非root用户不能绑定端口

问题形容在AWS上以普通用户身份装置nginx,启动时呈现无奈绑定8201端口的问题 ● nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 一 2021-04-19 12:28:16 CST; 9s ago Docs: http://nginx.org/en/docs/ Process: 14781 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)4月 19 12:28:16 ip-172-31-6-83 systemd[1]: Starting nginx - high performance web server...4月 19 12:28:16 ip-172-31-6-83 nginx[14781]: nginx: [emerg] bind() to 0.0.0.0:8201 failed (1...ed)4月 19 12:28:16 ip-172-31-6-83 systemd[1]: nginx.service: control process exited, code=exite...s=14月 19 12:28:16 ip-172-31-6-83 systemd[1]: Failed to start nginx - high performance web server.4月 19 12:28:16 ip-172-31-6-83 systemd[1]: Unit nginx.service entered failed state.4月 19 12:28:16 ip-172-31-6-83 systemd[1]: nginx.service failed.问题解决在网上搜寻到相干信息,都是提醒非用户不能操作1024以上的端口,跟以后问题不符,起初在博客园上找到解决方案,是跟setlinux无关。 ...

April 25, 2021 · 1 min · jiezi

关于mirror:Nginx-Mirror-流量复制的心路历程

原文地址:Nginx Mirror 流量复制的心路历程 背景上篇文章写到 Lua OpenResty的容器化,我的项目实现了上云,然而有面临了几个新的问题: 旧业务跑了这么多年,如何保障上云后的稳定性呢?如何确保接口都能失常拜访呢?如何确保两边api申请的幂等呢?为了保障服务的品质,咱们决定借助 nginx mirror(流量复制)来统计服务的幂等状况,作为判断服务是否达到上线规范的一个重要指标。 nginx mirror是什么?ngx_http_mirror_module 模块(1.13.4)通过创立后盾镜像子申请来实现原始申请的镜像。镜像子申请的响应将被疏忽。 利用 mirror 模块,业务能够将线上实时拜访流量拷贝至其余环境,基于这些流量能够做版本公布前的事后验证,进行流量放大后的压测。 官网案例: upstream mirror_backend { server mirrorHost:mirrorPort;}location / { mirror /mirror; proxy_pass http://backend;}location = /mirror { internal; proxy_pass http://mirror_backend$request_uri;}如何判断mirror后的后果是否幂等?mirror后,能够通过剖析两边的access.log,来判断幂等状况: 170.21.40.147 [20/Apr/2021:14:02:02 +0000] "POST /test/query?client_name=test&client_version=2148205812&client_sequence=1&r=1618327396996&isvip=0&release_version=1.1.0然而要判断同一个申请在两边的后果是否幂等,单目前的信息还是不够的,比方: 如何判断两边是同一个申请?如何判断申请返回的后果是统一的?如何对所有申请的幂等性进行统计?如何判断两边是同一个申请?要判断两边申请是否同一个,咱们须要一个Unique Tracing ID,并且贯通两边的access.log。 Nginx在 1.11.0 版本中就提供了内置变量 $request_id ,其原理就是生成32位的随机字符串,虽不能比较UUID的概率,但32位的随机字符串的反复概率也是微不足道了,所以个别可视为UUID来应用即可。so,咱们能够在生产机器的nginx的access.log减少$request_id: log_format access_log_format ''$remote_addr $request_time $request $request_id';并将$request_id通过header和申请一起转发到mirror的服务器上: location = /mirror { internal; proxy_set_header X-Request-Id $request_id; # $request_id proxy_pass http://test_backend$request_uri;}最初在mirror服务器的nginx access日志格局减少: $http_request_id,就能够失去: 170.21.40.147 [20/Apr/2021:14:02:02 +0000] "POST /test/query?client_name=test&client_version=2148205812&client_sequence=1&r=1618327396996&isvip=0&release_version=1.1.0 nqrbyg9l50jwu3ezmvtfc6hx487i2kpo两个通过nqrbyg9l50jwu3ezmvtfc6hx487i2kpo就能够将申请关联上了。 ...

April 21, 2021 · 1 min · jiezi

关于nginx:Nginx-配置-ssl-证书

Nginx 配置cd /usr/local/nginx/confmkdir cert# 上传证书到此目录cd certvim /usr/local/nginx/conf/sites/yourdomain.com.confserver { #如果应用Nginx 1.15.0及以上版本,用listen 443 ssl代替listen 443和ssl on listen 443 ssl; #须要将yourdomain.com替换成证书绑定的域名 server_name yourdomain.com; root /example.com/public; index index.html index.htm; #证书文件的名称 ssl_certificate cert/cert-file-name.pem; #证书密钥文件的名称 ssl_certificate_key cert/cert-file-name.key; ssl_session_timeout 5m; #示意应用的加密套件的类型 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #示意应用的TLS协定的类型 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { try_files $uri $uri/; }}# 可选:设置HTTP申请主动跳转HTTPS。server { listen 80; #须要将yourdomain.com替换成证书绑定的域名 server_name yourdomain.com; #将所有HTTP申请通过rewrite指令重定向到HTTPS rewrite ^(.*)$ https://$host$1; location / { try_files $uri $uri/; }}如果应用的是云服务器,须在平安组页面,配置放行80端口和443端口,否则网站拜访可能出现异常。虚拟主机可选:设置HTTP申请主动跳转HTTPS。 vim .htaccessRewriteEngine OnRewriteCond %{HTTP:From-Https} !^on$ [NC]#须要将yourdomain.com替换成证书绑定的域名RewriteCond %{HTTP_HOST} ^(www.)?yourdomain.com$ [NC]#须要将yourdomain.com替换成证书绑定的域名RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L]重启Nginx服务 ...

April 14, 2021 · 1 min · jiezi

关于docker:使用Portainer部署Docker容器实践

一、背景最近在应用rancher2.5.5部署Redis主从复制的时候,发现rancher会产生很多iptables的规定,这些规定导致咱们在部署了rancher的机器上无奈应用Redis的主从复制性能,因为我对rancher和k8s的理解也仅限于理解网络架构和应用,对底层并不深刻,短期内无奈解决这个网络抵触的问题; 因而我将rancher治理docker的模式换成应用protainer的形式,这个portainer相对来说更加轻量级,在搭建过程中也应用了几个小时学习,当初讲整个过程尽量还原给大家一些参考。 二、操作步骤装置Portiner治理节点部署容器三、装置Portiner装置Portiner的形式有很多种,但我一贯喜爱应用最简略的办法来实现所须要做的事件,因而这里我将应用docker的形式来搭建它。 3.1 docker部署docker部署的形式非常简单,只须要执行简略的运行容器命令即可,命令如下所示。 docker run -d \-p 9000:9000 \-p 8000:8000 \--restart always \-v /var/run/docker.sock:/var/run/docker.sock \-v /opt/docker/portainer-ce/data:/data \--name portainer-ce portainer/portainer-ce命令中映射了物理机的8000端口和9000端口到容器中的8000端口以及9000端口,同时将宿主机的docker通信文件/var/run/docker.sock也映射到了容器中,另外为了长久化部署,还将目录 /opt/docker/portainer-ce/data映射到了容器的/data目录下,命令执行实现之后,返回后果信息如下图所示 在上图中能够看到曾经胜利运行了一个docker容器,接下来我须要验证服务是否失常运行,应用浏览器拜访URLhttp://127.0.0.1:9000/地址,后果如下所示 在上图中能够看到Portainer零碎曾经可能拜访, 阐明胜利零碎装置胜利了。 3.2 节点初始化当初我须要设置管理员的账号密码,这里我简略填写明码和确认明码之后,点击Create user按钮即可创立管理员账户。 管理员账户设置实现之后,须要进行初始化,如下图所示 在上图中有三个选项,我抉择应用Portainer治理本地docker程序,点击Connect按钮,即可实现初始化操作。 3.3 性能初探实现初始化操作之后,就能够进入Portainer的工作界面,如下图所示 在上图找那个能够看到Portainer零碎中曾经有一个local的本地节点,咱们能够点击它进入节点的治理,如下图所示 在上图中能够看到Portainer零碎列出了local节点的 Stack、容器信息、镜像信息、磁盘信息、网络信息等等,这里我随便点击Containers区块,就能够看到容器列表,如下图所示 在上图中能够看到容器列表中存在两个容器,以及容器的运行状态,也能够对这些容器进行管制。 四、治理节点当初曾经对本地docker能够进行管制,然而我并不满足于此,我须要对其余机器也进行管制。 4.1 开始增加节点在Portainer零碎中,有一个endpoints的菜单,在这个菜单当中能够增加多个节点,如下图所示在上图中能够看到,曾经有一个local的节点,在列表上方有一个Add endpoint按钮,点击按钮后就能够来到增加节点的详情页,如下图所示 在上图中能够看到有5个选项,这里我抉择最简略的一种形式,应用Docker API进行管制。 4.2 凋谢API管制这种办法须要在节点的docker启动程序中增加参数,因而我须要先登录到节点服务器中去,ssh登登录服务器的命令如下所示 ssh root@xxx.xxx.xxx.xxx命令执行结束之后,返回如下图所示 在上图中能够看到曾经进入节点所在的服务器,接着须要编辑docker启动的配置文件,命令如下所示 vim /usr/lib/systemd/system/docker.service命令执行之后,就能够在vim编辑界面批改配置,如下图所示 将开启近程拜访代码退出到docker的启动命令行中,代码如下所示 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock将代码复制到 /usr/bin/dockerd 程序前面,如下图所示 保留配置文件之后,须要重启docker服务,重启docker的命令如下所示 systemctl daemon-reload && systemctl restart docker重启docker之后,一切正常的话就实现了 4.3 验证端口状态查看docker的配置信息,命令如下所示 ...

April 10, 2021 · 1 min · jiezi

关于golang:nginx与后端服务长短链接配置性能差异比较

有一个服务在qps几万的时候偶然呈现申请timeout状况,因为该机器作为p2p下载的文件源站和服务端,之前流量会被打满时会呈现申请timeout的状况。然而通过优化p2p后最近的流量简直都不会超过1GB/s,查看日志发现qps在2万以上就偶然呈现timeout的状况,很是奇怪。毕竟golang原生的http服务写个hello word放在服务器都能够几十万qps的。该服务是通过nginx托管文件作为下载源,并转发客户端下载分片申请至后端服务,应用wrk简略压测返回简略信息的接口发现qps只有4w+,且呈现局部timeout的谬误。应用wrk间接申请服务后端接口,qps却有30w+,wrk间接申请nginx返回简略字符串qps也有30W+,看来问题出在nginx配置上!查看配置后发现原来nginx是间接转发至后端,未配置长连贯,那么一个申请来到后的过程是client->nginx->server要建设两次链接。于是在本地做了几个试验验证了一下猜测。应用的是mbp13 2020,4C8T,电脑散热不太行 所以qps有所稳定,但也很能反馈问题。 nginx间接返回字符串golang http server 返回字符串nginx+后端短连贯nginx+后端长链接nginx后端配置如下 # 长连贯配置upstream go_http{ server 127.0.0.1:13002; keepalive 300;}# 短连贯配置upstream go_http_short{ server 127.0.0.1:13002;}server { listen 13001; server_name helloWorld; location /nginx { default_type text/html ; return 200 "hello nginx"; } location /go { proxy_pass http://go_http; proxy_http_version 1.1; proxy_set_header Connection ""; } location /go_short{ proxy_pass http://go_http_short; }}压测命令 # 1. nginx间接返回字符串wrk -t 2 -c 100 -d 10s -H "Connection:Close" http://127.0.0.1:13001/nginx# 2. go http服务间接返回字符串wrk -t 2 -c 100 -d 10s -H "Connection:Close" http://127.0.0.1:13002/go# 3. nginx和go http放弃长连贯wrk -t 2 -c 100 -d 10s -H "Connection:Close" http://127.0.0.1:13001/go# 4. nginx和go http采纳短连贯wrk -t 2 -c 100 -d 10s -H "Connection:Close" http://127.0.0.1:13001/go_short最初后果1和2约为6~7万的qps,3为4~5万qps,4仅有3~4千qps线上服务的相干测试后果为30~40万qps,而原来的配置只有5万qps左右。另外nginx其余参数优化及配置约有设置worker数量、敞开惯例日志、设定最大连接数等等就不一一赘述。 ...

April 10, 2021 · 1 min · jiezi

关于域名解析:重磅官宣Nacos20性能提升10倍

简介:Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能晋升了 10 倍。作者:席翁 继 Nacos 1.0 公布以来,Nacos 迅速被成千上万家企业采纳,并构建起弱小的生态。 然而随着用户深刻应用,逐步裸露一些性能问题,因而咱们启动了 Nacos 2.0 的隔代产品设计,时隔半年咱们终于将其全副实现,实测性能晋升10倍,置信能满足所有用户的性能需求。上面由我代表社区为大家介绍一下这款跨代产品。 Nacos 简介Nacos 是一个更易于构建云原生利用的动静服务发现、配置管理和服务治理平台。它 孵化于 阿里巴巴,成长于十年双十一的洪峰考验,积淀了简略易用、稳固牢靠、性能卓越的外围竞争力。 Nacos 2.0 架构全新2.0 架构不仅将性能大幅晋升10倍,而且内核进行了分层形象,并且实现插件扩大机制。 Nacos 2.0 架构档次如下图,它相比Nacos1.X的最次要变动是: 通信层对立到gRPC协定,同时欠缺了客户端和服务端的流量管制和负载平衡能力,晋升的整体吞吐。将存储和一致性模型做了充沛形象分层,架构更简略清晰,代码更加强壮,性能更加强悍。设计了可拓展的接口,晋升了集成能力,如让用户扩大实现各自的平安机制。Nacos2.0 服务发现降级一致性模型Nacos2架构下的服务发现,客户端通过Grpc,发动注册服务或订阅服务的申请。服务端应用Client对象来记录该客户端应用Grpc连贯公布了哪些服务,又订阅了哪些服务,并将该Client进行服务间同步。因为理论的应用习惯是服务到客户端的映射,即服务下有哪些客户端实例;因而2.0的服务端会通过构建索引和元数据,疾速生成相似1.X中的Service信息,并将Service的数据通过Grpc Stream进行推送。 Nacos2.0 配置管理降级通信机制配置管理之前用Http1.1的Keep Alive模式30s发一个心跳模仿长链接,协定难以了解,内存耗费大,推送性能弱,因而2.0通过gRPC彻底解决这些问题,内存耗费大量升高。 Nacos2.0 架构劣势Nacos2.0大幅升高了资源耗费,晋升吞吐性能,优化客户端和服务端交互,对用户更加敌对;尽管可观测性稍微降落,然而整体性价比十分高。 Nacos2.0 性能晋升因为Nacos由服务发现和配置管理两大模块形成,业务模型略有差别,因而咱们上面别离介绍一下具体压测指标。 Nacos2.0 服务发现的性能晋升服务发现场景咱们次要关注客户端数,服务数实例数,及服务订阅者数在大规模场景下,服务端在推送及稳固状态时的性能体现。同时还关注在有大量服务在进行高低线时,零碎的性能体现。 容量及稳固状态测试该场景次要关注随着服务规模和客户端实例规模上涨,零碎性能体现。 能够看到2.0.0版本在10W级客户端规模下,可能稳固的撑持,在达到稳固状态后,CPU的损耗非常低。尽管在最后的大量注册阶段,因为存在刹时的大量注册和推送,因而有肯定的推送超时,然而会在重试后推送胜利,不会影响数据一致性。 反观1.X版本,在10W、5W级客户端下,服务端齐全处于Full GC状态,推送齐全失败,集群不可用;在2W客户端规模下,尽管服务端运行状态失常,但因为心跳解决不及时,大量服务在摘除和注册阶段重复进行,因而达不到稳固状态,CPU始终很高。1.2W客户端规模下,能够稳固运行,但稳态时CPU耗费是更大规模下2.0的3倍以上。 频繁变更测试该场景次要关注业务大规模公布,服务频繁推送条件下,不同版本的吞吐和失败率。 频繁变更时,2.0和1.X在达到稳固状态后,均能稳固撑持,其中2.0因为不再有刹时的推送风暴,因而推送失败率归0,而1.X的UDP推送的不稳定性导致了有极小局部推送呈现了超时,须要重试推送。 Nacos2.0 配置管理的性能晋升因为配置是少写多读场景,所以瓶颈次要在单台监听的客户端数量以及配置的推送获取上,因而配置管理的压测性能次要集中于单台服务端的连贯数量以及大量推送的比拟。 Nacos2.0 连贯容量测试该场景次要关注不同客户端规模下的零碎压力。 Nacos2.0 最高单机可能撑持4.2w个配置客户端连贯,在连贯建设的阶段,有大量订阅申请须要解决,因而CPU耗费较高,但达到稳态后,CPU的耗费会变得很低。简直没有耗费。 反观Nacos1.X, 在客户端6000时,稳固状态的CPU始终很高,且GC频繁,次要起因是长轮训是通过hold申请来放弃连贯,每30s须要回一次 Response并且从新发动连贯和申请。须要做大量的上下文切换,同时还须要持有所有Request 和 Response。当规模达到1.2w客户端时,曾经无奈达到稳态,所以无奈撑持这个量级的客户端数。 Nacos2.0 频繁推送测试该场景关注不同推送规模下的零碎体现。 在频繁变更的场景,两个版本都处于6000个客户端连贯中。显著能够发现2.0版本的性能损耗要远低于1.X版本。 在3000tps的推送场景下,优化水平约优化了3倍。 Nacos2.0 性能论断针对服务发现场景,Nacos2.0可能在10W级规模下,稳固运行;相比Nacos1.X版本的1.2W规模,晋升约10倍。 针对配置管理场景,Nacos2.0单机最高可能撑持4.2W个客户端连贯;相比Nacos1.X,晋升了7倍。且推送时的性能显著好于1.X。 Nacos生态及2.X后续布局随着Nacos三年的倒退,简直反对了所有开源的RPC框架和微服务生态,并且引领云原生微服务生态倒退。 Nacos在整个微服务生态中十分外围的组件,它能够无缝和K8s服务发现体系互通,通过MCP/XDS协定与Istio通信将Nacos服务下发Sidecar;同样也能够和CoreDNS联结,将Nacos服务通过域名模式裸露给上游调用。 Nacos目前曾经和各类微服务RPC框架交融,进行服务发现;另外能够帮助高可用框架Sentinel进行各类治理规定的管制和下发。 如果只应用RPC框架,有时候并不足够简略,因为局部RPC框架比方Grpc和Thrift,还须要自行启动Server并告知client该调用哪个IP。 这时候就须要和利用框架进行交融,比方SCA、Dapr等;当然也能够通过Envoy Sidecar来进行流量管制,应用层的RPC就不须要晓得服务的ip列表了。 ...

April 9, 2021 · 1 min · jiezi

关于域名解析:如何实现阿里云容器镜像服务反向访问代理

简介:本文会先介绍镜像推送/拉取过程的交互逻辑来梳理须要代理的所有服务,再通过搭建一个公网 HTTPS 反向代理来拜访容器镜像服务来向您展现多场景代理拜访模式原理。实在业务场景可能很简单,因平安、合规、拜访限度等起因可能须要: 在线下 IDC 通过代理来拜访云上资源。在地区 A 通过云企业网来拜访地区 B 的云资源。金融云环境下,因金融云网络架构限度,金融云内网类型的只能在金融云外部拜访,不反对在互联网上间接拜访,须要通过代理来拜访。针对阿里云容器镜像服务(默认实例/企业版实例),本文会先介绍镜像推送/拉取过程的交互逻辑来梳理须要代理的所有服务,再通过搭建一个公网 HTTP 反向代理来拜访容器镜像服务来向您展现多场景代理拜访模式原理。 镜像推拉过程 上图展示了阿里云容器镜像服务推送/拉取的整个交互过程: 向 registry 发动镜像推拉申请。registry 返回 401 Unauthorized 的 HTTP 返回值,并且携带鉴权服务(authorization service)的地址,须要客户端去做鉴权。客户端向鉴权服务发动申请以获取一个受权 token。鉴权服务返回一个携带权限的 token 给客户端。客户端将 token 嵌入 HTTP Authorization header 头中,再次向 registry 发动申请。registry 验证 token 权限无问题后,在镜像推送过程中,客户端能够向 registry 推送镜像数据;在镜像拉取过程中,registry 会向客户端颁发有时效的 OSS url 地址。客户端通过 OSS url 地址拉取保存在 OSS 中的镜像数据。整个拜访阿里云容器镜像服务实例的过程波及 Registry、Authorization Service 和 OSS 三局部。 容器镜像相干服务地址客户端拜访容器镜像服务,须要与 registry、authorization service 和 oss 三种服务通信。 域名通过代理形式拜访容器镜像服务,个别须要晓得所有相干域名。 registry 地址公网默认实例地址格局:registry.${RegionId}.aliyuncs.com 2. 内网默认实例地址格局:registry-vpc.${RegionId}.aliyuncs.com3. 企业版实例公网/内网地址:实例内可见。authorization service 地址公网默认鉴权服务地址格局:dockerauth.${RegionId}.aliyuncs.com 2. 内网默认鉴权服务格局:dockerauth-vpc.${RegionId}.aliyuncs.com3. 公网企业版实例服务地址格局:dockerauth-ee.${RegionId}.aliyuncs.com4. 内网企业版实例服务地址格局:dockerauth-ee-vpc.${RegionId}.aliyuncs.comOSS Bucket 地址公网 OSS Bucket 地址:oss-${RegionId}.aliyuncs.com ...

April 8, 2021 · 3 min · jiezi

关于docker:使用-Docker-运行-Nginx-容器

# 搜寻nginx镜像docker search nginx# 拉取nginx镜像docker pull nginx# 查看所有镜像docker images# 运行nginx容器,-d 后盾运行容器并打印出容器ID,-p 将容器的80端口映射到主机的3344端口docker run -d -p 3344:80 --name nginx01 nginx在浏览器中拜访并显示 Nginx 的默认页: http://localhost:3344在开发者工具中能够看到: Status Code: 304 Not ModifiedRemote Address: [::1]:80查看所有运行中的容器: docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES8a47e6646e26 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx01curl测试: curl localhost:3344进入容器: docker exec -it nginx01 /bin/bashexit通过容器名称进行容器: docker container stop nginx01通过容器名称移除容器: docker container rm nginx01 laughing_kowalevski relaxed_sammet

April 5, 2021 · 1 min · jiezi

关于nginx:记一次生产环境大面积404问题

写在后面公布到线上的接口服务始终好端端的,明天忽然经营反馈说很多性能无奈失常应用。通过排查,发现前端调用后端接口时,局部接口呈现404的景象。明天,我到公司比拟晚,必定是哪个小伙伴昨晚上班,走出办公室前没有祷告服务器不要出问题。要把这个人揪出来,吊在服务器上——祭天! 文章已收录到: https://github.com/sunshinelyz/technology-binghe https://gitee.com/binghe001/technology-binghe 问题复现得悉经营的反馈后,我迅速登录服务器排查问题。首先,查看了接口服务的启动过程失常。验证接口服务的ip和端口是否失常,后果也是没啥问题。接下来,通过Nginx转发申请,此时呈现了问题,无法访问接口。同时Nginx的access.log文件中输入了如下日志信息。 192.168.175.120 - - [26/Feb/2021:21:34:21 +0800] "GET /third/system/base/thirdapp/get_detail HTTP/1.1" 404 0 "http://192.168.175.100/api/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"192.168.175.120 - - [26/Feb/2021:21:34:22 +0800] "GET /third/system/base/thirdapp/get_detail HTTP/1.1" 404 0 "http://192.168.175.100/api/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"192.168.175.120 - - [26/Feb/2021:21:34:26 +0800] "GET /third/system/base/thirdapp/get_detail HTTP/1.1" 404 0 "http://192.168.175.100/api/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"此时,从Nginx日志中发现,输入的状态为404,未找到后端的接口服务。为了进一步定位问题,我间接在线上环境通过curl命令的形式来拜访接口服务,后果是失常的。 通过这一系列的操作之后,咱们就能够确定问题是出在Nginx上了。 问题剖析Nginx开启debug模块既然曾经定位到问题了,那咱们接下来就要剖析下产生问题的具体起因了。既然是Nginx的问题,我第一工夫想到的就是调试Nginx查找谬误起因。于是我在服务器命令行输出了如下命令来查看装置Nginx时的配置状况。 nginx -V留神:这里曾经为Nginx配置了零碎环境变量,如果没有配置零碎环境变量,则须要输出nginx命令所在目录的残缺门路,例如: /usr/local/nginx/sbin/nginx -v命令行输入了如下信息。 ...

March 29, 2021 · 3 min · jiezi

关于缓存:使用-Arthas-排查-SpringBoot-诡异耗时的-Bug

简介:公司有个渠道零碎,专门对接三方渠道应用,没有什么业务逻辑,次要是转换报文和参数校验之类的工作,起着一个承前启后的作用。最近,在优化接口的响应工夫,优化了代码之后,然而工夫还是达不到要求;有一个诡异的 100ms 左右的耗时问题,在接口中打印了申请解决工夫后,和调用方的响应工夫还有差了 100ms 左右。比方程序里记录 150ms,然而调用方等待时间却为 250ms 左右。本文记录了过后具体的定位 & 解决流程(其实解决很简略,关键在于怎么定位并找到解决问题的办法)。 作者 | 空无 起源 | 阿里巴巴云原生公众号 背景公司有个渠道零碎,专门对接三方渠道应用,没有什么业务逻辑,次要是转换报文和参数校验之类的工作,起着一个承前启后的作用。 最近在优化接口的响应工夫,优化了代码之后,然而工夫还是达不到要求;有一个诡异的 100ms 左右的耗时问题,在接口中打印了申请解决工夫后,和调用方的响应工夫还有差了 100ms 左右。比方程序里记录 150ms,然而调用方等待时间却为 250ms 左右。 上面记录下过后具体的定位 & 解决流程(其实解决很简略,关键在于怎么定位并找到解决问题的办法)。 定位过程1. 剖析代码渠道零碎是一个常见的 Spring-boot web 工程,应用了集成的 tomcat。剖析了代码之后,发现并没有非凡的中央,没有非凡的过滤器或者拦截器,所以初步排除是业务代码问题。 2. 剖析调用流程呈现这个问题之后,首先确认了下接口的调用流程。因为是内部测试,所以调用流程较少。 Nginx -反向代理-> 渠道零碎 公司是云服务器,网络走的也是云的内网。因为不明确问题的起因,所以用排除法,首先确认服务器网络是否有问题。 先确认发送端到 Nginx Host 是否有问题: [jboss@VM_0_139_centos ~]$ ping 10.0.0.139PING 10.0.0.139 (10.0.0.139) 56(84) bytes of data.64 bytes from 10.0.0.139: icmp_seq=1 ttl=64 time=0.029 ms64 bytes from 10.0.0.139: icmp_seq=2 ttl=64 time=0.041 ms64 bytes from 10.0.0.139: icmp_seq=3 ttl=64 time=0.040 ms64 bytes from 10.0.0.139: icmp_seq=4 ttl=64 time=0.040 ms从 ping 后果上看,发送端到 Nginx 主机的提早是无问题的,接下来查看 Nginx 到渠道零碎的网络。 ...

March 29, 2021 · 8 min · jiezi

关于nginx:resty-命令行工具演示

https://www.bilibili.com/vide... 在本教程中,咱们将演示如何应用 OpenResty 附带的 resty 命令行工具。 cd ~export PATH=/usr/local/openresty/bin:$PATHwhich resty 个别都是这个门路。 咱们能够通过 -V 选项查看其版本号。 resty -V 如果你应用咱们预构建的 Linux 二进制包装置 OpenResty,那么你应该装置 openresty-resty 包。 dnf list installed openresty-resty 因为它不在 openresty 主包中。 比方用 resty 命令来做“hello world”,就容易多了。 resty -e 'print("Hello World")' 留神 -e 选项。 或者在终端上运行一个 Lua 脚本。 echo 'print("Hello World")' > hello.luacat hello.luaresty hello.lua 所以这也是应用 OpenResty 编写新的命令行应用程序的好办法。 这里也能够实现非阻塞 I/O。 time resty -e 'ngx.sleep(1) ngx.say("done")' 让咱们应用 cosocket API 连贯到 openresty.com 的 443 端口。 resty -e 'local sock = ngx.socket.tcp() print(sock:connect("openresty.com", 443))' ...

March 26, 2021 · 2 min · jiezi

关于nginx:Nginx配置gzip

nginx配置内容# fix post大文件时出错# client_max_body_size 50m; #本体文件曾经配置# client_header_buffer_size 10m; #本体文件曾经配置large_client_header_buffers 20 10m;# gzip# gzip on; #本体文件已开启, 这里不必配gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 3;gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;gzip_vary on;gzip_proxied any;

March 26, 2021 · 1 min · jiezi

关于nginx:nginx-httpcode426

nginx代理webSocket配置如果少了proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 这两个配置就会呈现http 426报错在location中增加 proxy_http_version 1.1; proxy_set_header Connection "";

March 24, 2021 · 1 min · jiezi

关于nginx:为-OpenResty-应用编写你自己的-Lua-模块

https://www.bilibili.com/vide... 明天我就来演示一下如何在 OpenResty 利用中编写本人的 Lua 模块,一步一步来。 让咱们把咱们简略的 OpenResty 利用放到一个新的目录中,命名为 test-module。 cd ~/mkdir test-module/cd test-module/ 而后咱们像平常一样创立子目录构造。 mkdir logs conf lua 请留神,与上一篇教程中的“Hello World”示例不同,咱们在这里创立了一个 lua/ 目录来寄存咱们的 lua 模块文件。 当初让咱们在 lua 子目录下创立咱们本人的 Lua 模块文件,命名为 hello.lua。 vim lua/hello.lua咱们进行如下编辑操作: 申明 Lua 模块表 _M。而后给这个 Lua 模块增加一个名为 greet 的函数。最初,别忘了在最初返回模块表。local _M = {}function _M.greet(name) ngx.say("Greetings from ", name)endreturn _M搞定!一个很简略的 Lua 模块就实现了。 当初是创立 nginx.conf 配置文件的时候了。 vim conf/nginx.conf咱们疾速实现下列编辑操作: 咱们疾速写出绝对固定的配置。在 http {} 配置块中,咱们应该通知 OpenResty 咱们的 Lua 模块在哪里。请留神,非凡变量 $prefix 在运行时被 nginx 的 -p 选项值所代替。而后咱们创立一个 HTTP 服务器,监听 8080 端口。并在根地位配置 content_by_lua"_block。这里咱们用 require 内置函数加载 Lua 模块 hello。咱们用一个参数调用它的 greet 函数。worker_processes 1;events { worker_connections 1024;}http { lua_package_path "$prefix/lua/?.lua;;"; server { listen 8080 reuseport; location / { default_type text/plain; content_by_lua_block { local hello = require "hello" hello.greet("a Lua module") } } }}咱们当初就来查看整个目录树。 ...

March 24, 2021 · 2 min · jiezi

关于nginx:使用-OpenResty-实现你好世界-HTTP-示例

https://www.bilibili.com/vide... 上面我将演示如何应用 OpenResty 实现一个“hello world”的 HTTP 接口。 首先,咱们要确保咱们应用的是 OpenResty 的 nginx。 export PATH=/usr/local/openresty/nginx/sbin:$PATHwhich nginx 个别都是这个门路。 而后咱们进入 home 目录。 cd ~/在咱们的例子中,创立并切换到一个名为 hello 的目录。 mkdir hellocd hello 为 OpenResty 应用程序创立模板子目录。 mkdir logs confls 而后让咱们在“conf”子目录下创立一个简略的 nginx.conf 文件。 vim conf/nginx.conf为了简略起见,让咱们启用单个 nginx 工作过程。咱们最多启用 1024 个每工作过程的连贯。而这里咱们配置一个 HTTP 服务器。启用 reuseport 后监听 8080 端口。最初咱们给这个服务器增加一个根地位。咱们将默认的 MIME 类型设置为 text/plain。咱们嵌入一些 Lua 代码来收回一个响应体是“Hello World”。worker_processes 1;events { worker_connections 1024;}http { server { listen 8080 reuseport; location / { default_type text/plain; content_by_lua_block { ngx.say("Hello World") } } }}当初让咱们用 -t 选项来测试配置是否正确。 ...

March 23, 2021 · 1 min · jiezi

关于安全:OpenKruise-v080-版本K8s-社区首个规模化镜像预热能力

简介:OpenKruise 是阿里云开源的云原生利用自动化治理套件,也是以后托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 我的项目。它来自阿里巴巴多年来容器化、云原生的技术积淀,是阿里外部生产环境大规模利用的基于 Kubernetes 之上的规范扩大组件,紧贴上游社区规范、适应互联网规模化场景的技术理念与最佳实际。 作者 | 王思宇(酒祝) 起源 | 阿里巴巴云原生公众号 背景OpenKruise 是阿里云开源的云原生利用自动化治理套件,也是以后托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 我的项目。它来自阿里巴巴多年来容器化、云原生的技术积淀,是阿里外部生产环境大规模利用的基于 Kubernetes 之上的规范扩大组件,紧贴上游社区规范、适应互联网规模化场景的技术理念与最佳实际。 新版本概览Kruise 在 2021 年 3 月 4 日公布了最新的 v0.8.0 版本(ChangeLog),本文以下对新版本做一个整体的概览介绍。 1. 新增 kruise-daemon 组件过来曾经应用过 OpenKruise 的同学肯定晓得,Kruise 装置之后运行的组件是 kruise-manager,它是一个中心化部署的 Operator 组件,蕴含了一系列 controller 控制器以及 webhook。 而从 v0.8.0 开始,咱们又减少了 kruise-daemon 这个节点组件,通过 DaemonSet 部署到每个节点上。这样,始终以来社区小伙伴们提的相似镜像预热、容器重启等需要,就有路径去实现啦! Tips: 目前 kruise 提供的官网镜像反对 Linux 的 amd64(x86)、arm64、arm/v7 架构,如果你的集群中存在非以上架构的节点,临时是无奈失常运行 kruise-daemon 的,有这类需要的同学能够提issue 阐明你的需要。如果你存在上述情况,或者你不心愿在某些节点上装置 kruise-daemon,能够在 helm 装置的时候通过 daemon.affinity 参数来指定 kruise-daemon 部署的亲和性规定。2. 规模化镜像预热能力在 Kubernetes 生态中,过来并没有一个成熟的镜像预热开源解决方案,可能更多的是一些公司在外部会落地一些适配于本地场景的预热,这其中也包含阿里巴巴。不过从 v0.8.0 开始,咱们将阿里巴巴所做的镜像预热能力齐全通用化输入到 OpenKruise 中,并且阿里外部的镜像预热也齐全对立到这套开源的实现上来了。 ...

March 23, 2021 · 2 min · jiezi

关于nginx:如何通过gzip和nginx来提高网站打开速度及整体性能

要晓得,网站的关上速度取决于浏览器关上下载的网页文件大小。如果传输的页面内容文件缩小,那你网站的关上速度肯定会放慢。特地是手机端的用户,关上网站速度受限于挪动端网络,所以压缩网站页面内容显得至关重要。 gzip是一种十分风行的数据压缩形式。你能够在nginx配置中开启gzip来压缩网页文件。而后,这些文件又由浏览器解压缩,文件不会受任何。然而压缩文件是会占用服务器资源,所以最好压缩那些成果比拟好的文件。比方文本文件压缩成果十分好,通常会放大两倍多。而JPG或PNG这类文件,自身就曾经进行格局压缩,所以再做二次压缩,成果并不是特地显著。 本文次要讲一下如何配置nginx来开启gzip压缩。 环境ubuntu 20.04服务器root权限或具备sudo特权的非root用户一、创立测试文件在这一步中,咱们将在默认的Nginx目录中创立几个测试文件。稍后咱们将应用这些文件来查看Nginx的默认行为是否进行gzip压缩,并测试配置更改是否具备预期的成果。 首先,创立几个测试文件,这些文件次要用来查看咱们的gzip压缩成果。gzip是不会剖析文件内容的,它次要通过文件扩展名来判断文件类型,如果还剖析文件内容,那整个效率就会大大降低。所以咱们能够创立一些图像文件、html文件和一些款式文件。 sudo truncate -s 1k /var/www/html/test.htmlsudo truncate -s 1k /var/www/html/test.jpgsudo truncate -s 1k /var/www/html/test.csssudo truncate -s 1k /var/www/html/test.js下一步是查看Nginx在应用咱们刚创立的文件在全新装置中压缩申请的文件时的行为。 二、命令形式查看压缩成果应用curl命令形式,增加标头Accept-Encoding: gzip,来查看各文件的压缩后果。 curl -H "Accept-Encoding: gzip" -I http://localhost/test.html能够看到以下后果: OutputHTTP/1.1 200 OKServer: nginx/1.18.0 (Ubuntu)Date: Tue, 09 Feb 2021 19:04:25 GMTContent-Type: text/htmlLast-Modified: Tue, 09 Feb 2021 19:03:41 GMTConnection: keep-aliveETag: W/"6022dc8d-400"Content-Encoding: gzip在最初一行,呈现Content-Encoding: gzip字样。阐明服务器正在用gzip压缩来发送文件。默认状况下,nginx仅压缩html文件。所有在这个命令中能够看到文件做了压缩解决。但其它的文件格式,并未做压缩解决。能够通过上面这条命令来验证咱们方才的说法。 curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg再看一下后果,和之前的有所不同: OutputHTTP/1.1 200 OKServer: nginx/1.18.0 (Ubuntu)Date: Tue, 09 Feb 2021 19:05:49 GMTContent-Type: image/jpegContent-Length: 1024Last-Modified: Tue, 09 Feb 2021 19:03:45 GMTConnection: keep-aliveETag: "6022dc91-400"Accept-Ranges: bytes输入后果中没有呈现Content-Encoding: gzip,这意味着该文件并没有做任何的压缩。你也能够应用这个办法来测试css等款式文件。 ...

March 18, 2021 · 2 min · jiezi

关于springboot:springbootprometheusnginxgrafanadocker

springboot1. pom.xml 中增加micrometer-registry-prometheus依赖<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId></dependency>2. 启动类application 中增加注册@BeanMeterRegistryCustomizer<MeterRegistry> configurer( @Value("${spring.application.name}") String applicationName) { return (registry) -> registry.config().commonTags("application", applicationName);}3. 验证启动我的项目后输出 http://localhost:7000/actuator/prometheus 能看到一些度量指标时,示意胜利 prometheus1. 下载prometheus的包,点击此处去哦2. 解压之后,编辑 vim prometheus.yml ,批改红框中被监控服务的地址,内网地址即可 3. 启动 ./prometheus --config.file=./prometheus.yml验证 申请地址 http://localhost:9090/ 呈现治理界面,示意胜利 grafana1. 装置docker,如果未装置,可参考 https://blog.csdn.net/cainiao...2. 部署 grafana1.抽取须要挂载的配置文件配置文件1.先启动 grafana 用来抽取须要挂载的配置文件配置文件,最新版本的 grafana 配置文件跟网上一些文章说的不一样docker run -d --name grafana -p 3000:3000 2.复制出配置文件docker cp grafan:/usr/share/grafana/conf /root/install/grafana/ 3.为了应用nginx进行代理,批改需改配置, 编辑 defaults.ini 配置文件,批改红框中的内容 2.删除 grafana容器并重启docker kill grafanadocker rm grafanadocker run --user root -d --name grafana -p 3000:3000 -v /root/install/grafana/etc:/usr/share/grafana/conf/ grafana/grafana3.验证申请 http://{grafana所在的服务器地址}:3000/login 看到登录页面示意胜利,初始密码 admin/admin ...

March 17, 2021 · 1 min · jiezi

关于nginx:Prometheus-监控带用户名密码的-API-NGINX采集配置

返回 韦世东的技术专栏 播种爬虫架构/爬虫逆向/存储引擎/音讯队列/Python/Golang相干常识这篇文章的次要目标是通知大家如何配置 Prometheus,使得它能够从指定的 Web Api 接口采集指标数据。文章中用到的案例是 NGINX 的采集配置,从设定了用户名和明码的 NGINX 数据指标页中采集数据,因而这篇文章的副标题可能是 nginx 的 prometheus 采集配置或者prometheus 采集 basic auth 的 nginx。 上图是配置实现后,在 Grafana 配置了模板的成果。 应用过 Prometheus 的敌人想必都晓得如何配置 address:port 类服务,例如收集某个 Redis 的相干信息时,配置能够这么写: - job_name: 'redis' static_configs: - targets: ['11.22.33.58:6087']正文:以上案例中假如 Redis Exporter 的 地址和端口是 11.22.33.58:6087。 这种是最简略,也是最为人熟知的方法。然而如果要监控指定的 Web API,可就不能这么写了。如果你没有看到这篇文章,你可能会在搜索引擎外面这么搜: Prometheus 监控 WebPrometheus scrape WebPrometheus 监控接口Prometheus 监控指定 APIPrometheus API 配置Prometheus 域名 配置Prometheus basic authPrometheus 接口 用户名 明码但很可怜的是,搜不到什么无效信息(当初是 2021 年 03 月),能找到的基本上都是坑。 ...

March 15, 2021 · 3 min · jiezi

关于nginx:千万级-高并发-秒杀-架构设计含源码

公众号:MarkerHub,网站:https://markerhub.com小Hub领读:作者:绘你一世倾城https://juejin.im/post/5d84e2...github 源码地址:https://github.com/GuoZhaoran...每到节假日期间, 一二线城市返乡、外出玩耍的人们简直都面临着一个问题:抢火车票! 尽管当初大多数状况下都能订到票, 然而放票霎时即无票的场景,置信大家都深有体会。尤其是春节期间,大家不仅应用 12306,还会思考 “智行” 和其余的抢票软件, 全国上下几亿人在这段时间都在抢票。“12306 服务”接受着这个世界上任何秒杀零碎都无奈超过的 QPS, 上百万的并发再失常不过了!笔者专门钻研了一下 “12306” 的服务端架构, 学习到了其零碎设计上很多亮点,在这里和大家分享一下并模仿一个例子:如何在 100 万人同时抢 1 万张火车票时,零碎提供失常、稳固的服务。 1、大型高并发零碎架构高并发的零碎架构都会采纳分布式集群部署,服务下层有着层层负载平衡,并提供各种容灾伎俩 (双火机房、节点容错、服务器灾备等) 保证系统的高可用, 流量也会依据不同的负载能力和配置策略平衡到不同的服务器上。下边是一个简略的示意图: 1.1 负载平衡简介上图中形容了用户申请到服务器经验了三层的负载平衡,下边别离简略介绍一下这三种负载平衡: 1、OSPF(开放式最短链路优先) 是一个外部网关协定 (Interior Gateway Protocol, 简称 IGP)。OSPF 通过路由器之间通告网络接口的状态来建设链路状态数据库,生成最短门路树,OSPF 会主动计算路由接口上的 Cost 值,但也能够通过手工指定该接口的 Cost 值,手工指定的优先于主动计算的值。OSPF 计算的 Cost,同样是和接口带宽成反比,带宽越高,Cost 值越小。达到指标雷同 Cost 值的门路,能够执行负载平衡,最多 6 条链路同时执行负载平衡。 2、LVS (Linux VirtualServer),它是一种集群 (Cluster) 技术,采纳 IP 负载平衡技术和基于内容申请散发技术。调度用具有很好的吞吐率,将申请平衡地转移到不同的服务器上执行,且调度器主动屏蔽掉服务器的故障,从而将一组服务器形成一个高性能的、高可用的虚构服务器。 3、Nginx 想必大家都很相熟了, 是一款十分高性能的 http 代理 / 反向代理服务器, 服务开发中也常常应用它来做负载平衡。Nginx 实现负载平衡的形式次要有三种: 轮询、加权轮询、ip hash 轮询,上面咱们就针对 Nginx 的加权轮询做专门的配置和测试 1.2 Nginx 加权轮询的演示Nginx 实现负载平衡通过 upstream 模块实现,其中加权轮询的配置是能够给相干的服务加上一个权重值,配置的时候可能依据服务器的性能、负载能力设置相应的负载。上面是一个加权轮询负载的配置,我将在本地的监听 3001-3004 端口, 别离配置 1,2,3,4 的权重: ...

March 12, 2021 · 4 min · jiezi

关于nginx:nginx使用certbot免费ssl证书https很简单

很早就申请了很多域名,然而拜访起来浏览器老是显示一个不平安,看着真的是不爽,因为本人的网站也没什么内容就没配置https,次要还是看了网上的教程退缩了,感觉比拟麻烦。很多证书还要钱,本人也就学习性质地做个网站,所以就没搞,明天灵机一动就配置了一下,发现真的挺简略的,而且收费,本人学习玩玩够了,在这里记录一下。 1.装置nginxnginx的装置在这里就不多说了,能够应用 yum install nginx也能够编译装置,在这里就不多说了,要留神的一点是要装置ssl模块 2.装置certbot官网的教程是snap装置的,我就是这样装置的。 1.装置snapsudo yum install epel-releasesudo yum install snapdsudo systemctl enable --now snapd.socketsudo ln -s /var/lib/snapd/snap /snap这几步下来个别是不会出错的,这样sanp就装置好了 2.装置certbotsudo snap install coresudo snap refresh core如果之前装过certbot的话要先卸载 sudo yum remove certbotsudo ln -s /snap/bin/certbot /usr/bin/certbotsudo certbot --nginx或者 sudo certbot certonly --nginx这里会提醒输出邮箱和域名,还要批准协定,胜利后会有你证书的贮存地址 sudo certbot renew --dry-run最初这步是测验 3.配置nginx进入vim nginx/conf/nginx.conf,找到443端口的局部,记得放开443端口 server { listen 443 ssl; server_name akazwz.com; ssl_certificate /etc/letsencrypt/live/akazwz.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/akazwz.com/privkey.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }这是我的配置,贴在这里大家参考一下 ...

March 11, 2021 · 1 min · jiezi

关于nginx:Nginx报错client-intended-to-send-too-large-body

问题用Nginx做了接口转发,其余接口都失常,然而上传文件始终报跨域问题。 排错Ubuntu操作系统: 首先查看Nginx的报错日志:tail -f /var/log/nginx/error.log 发现如下报错: client intended to send too large body: 2211873 bytes原来是文件太大,都没转发进来就被Nginx拦挡了。 解决方案批改nginx配置: sudo vim /etc/nginx/nginx.conf在http括号里加上client_max_body_size 1024M;(这里文件下限大小大家看本人需要批改)如下: http { ... client_max_body_size 1024M; ...}而后重启nginx: sudo service nginx restart最初呈现跨域问题时: 先查看门路有没有写对都写对了就去看日志!肯定要养成看日志的好习惯,不要瞎排错。

March 11, 2021 · 1 min · jiezi

关于nginx:石火电光追风逐日前端优化之次时代图片压缩格式WebP的项目级躬身实践Python3-PILNginx

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_190 咱们晓得,在前端界有一个共识:速度就是生命,带宽就是金钱。怎么将页面加载速度无效晋升是有数前端工程师无时不刻在思考的课题,目前的网络环境中,除了视频,图片仍旧是占用流量较大的一部分,对于app端尤其如此,因而,如何在保障图片视觉不失真的前提下放大图片体积,对于节俭带宽和电池电量都非常重要,因而Google在十年前提出了一种新的图片压缩格局 :WebP,给图片的优化提供了新的方向。 WebP的劣势在于它具备更优的图像数据压缩算法,在领有肉眼简直无奈辨认差别的图像品质前提下,带来更小的图片体积,同时具备了无损和有损的压缩模式、Alpha 通明以及动画的个性,从JPEG 和 PNG 上的转化成果都十分突出、稳固和对立,寰球驰名视频网站YouTube的视频缩略图采纳WebP后,网页加载速度晋升了10%,晋升成果可见一斑: 本次咱们以本站为例子,应用Python3对站内图片进行无损压缩和转换,同时利用Nginx针对Webp图片判断申请头来对老版本浏览器做向下兼容,实现Webp图片的无缝切换。 首先,将网站的图片转换为Webp格局,这里咱们应用PIL库,该库宽泛用于Python中的图像处理,并且PIL图像库中最重要的类是Image类,该类在模块中以雷同的名称定义。 装置PIL: python3 -m pip install --upgrade pip python3 -m pip install --upgrade Pillow能够通过open办法加载图像文件并且展现它: from PIL import Image img = Image.open('sample.jpg') img.show()Image.convert()办法能够返回该图像的转换后的正本。此办法可通过调色板转换像素。以后版本反对“ L”,“ RGB”和“ CMYK”之间的所有格局转换。save(fp,format)应用两个输出参数,第一个是保留转换后的文件的文件门路(fp),第二个是要转换成的文件格式。 转换JPG到PNG: from PIL import Image img = Image.open('sample.jpg').convert('RGB') img.save('sample.jpg.png', 'png')转换PNG到JPG: from PIL import Image img = Image.open('sample.png').convert('RGB') img.save('sample.png.jpeg', 'jpeg')转换PNG到WEBP: from PIL import Image img = Image.open('sample.png').convert('RGB') img.save('sample.png.webp', 'webp')转换JPG到WEBP: from PIL import Image img = Image.open('sample.jpg').convert('RGB') img.save('sample.jpg.webp', 'webp')看起来相当简略,有的时候,咱们可能须要把某个目录下的图片进行批量转换,首先读取所有须要转换的图片: ...

March 10, 2021 · 3 min · jiezi