你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/83913.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/82001.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/83913.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/54175.html
你的文章充满了智慧,让人敬佩。 http://www.55baobei.com/yPc1K6Dj65.html
你的文章让我感受到了正能量,非常棒! http://www.55baobei.com/LFlACoaAHk.html
你的文章充满了智慧,让人敬佩。 https://www.yonboz.com/video/69415.html
你的文章让我感受到了正能量,非常棒! https://www.yonboz.com/video/64064.html
每次看到你的文章,我都觉得时间过得好快。 http://www.55baobei.com/zeADcmR4Q2.html
你的文章充满了创意,真是让人惊喜。 http://www.55baobei.com/oTRJX3essz.html
你的文章让我感受到了快乐,每天都要来看一看。 http://www.55baobei.com/XNGI6MtgmN.html
每次看到你的文章,我都觉得时间过得好快。 http://www.55baobei.com/rAhf8CYQvA.html
你的文章充满了创意,真是让人惊喜。 https://www.yonboz.com/video/8375.html
你的文章让我感受到了无尽的欢乐,谢谢分享。 https://www.4006400989.com/qyvideo/11081.html
首页
网站统计
关于本站
在线留言
友链申请
高清壁纸
论坛
开往
虫洞
推荐
Linux命令
资源网
Search
1
Typecho Cuteen主题美化
4,279 阅读
2
京东呆瓜搭建青龙面板+xdd-plus机器人+nvjdc配置
4,045 阅读
3
傻妞机器人最新版安装教程
3,450 阅读
4
好久不见之网站底部样式
2,783 阅读
5
Joe 主题 6.xx 底部增强,显示标签及二维码分享
2,636 阅读
Linux
Shell
Mysql
Typecho
网络
其他
Redis
登录
Search
标签搜索
Linux
Typecho
美化
Nginx
Shell
综合架构
Mysql
Joe
源码
Web
数据备份
命令
Ansible
k8s
定时任务
视频
网易云
白嫖
网络
Rsync
小黑
累计撰写
156
篇文章
累计收到
967
条评论
博主
11月27日
在线
首页
栏目
Linux
Shell
Mysql
Typecho
网络
其他
Redis
页面
网站统计
关于本站
在线留言
友链申请
高清壁纸
推荐
Linux命令
资源网
开往
搜索到
10
篇与
Nginx
的结果
2022-10-11
搭建jsdelivr镜像站
如果不想搞的话,可以用我的 https://jsd.ucbk.cn新建一个网站,然后把下面内容覆盖到nginx配置文件server { listen 80; listen 443 ssl http2; # 请更改为你的证书路径 ssl_certificate fullchain.pem; ssl_certificate_key privkey.pem; # 请更改为你的镜像域名 server_name jsd.ucbk.cn; location / { proxy_pass https://cdn.jsdelivr.net; proxy_set_header Host $proxy_host; proxy_set_header Accept-Encoding ''; proxy_ssl_server_name on; proxy_ssl_name $proxy_host; proxy_redirect / /; # Proxy Cache proxy_cache jsdelivr; proxy_cache_lock on; proxy_cache_lock_timeout 15s; proxy_cache_use_stale updating; proxy_cache_background_update on; proxy_cache_key $host$request_uri; proxy_cache_valid 200 301 302 30d; proxy_cache_valid 500 501 502 503 15s; proxy_cache_valid any 5m; # Replace Domain sub_filter_once off; sub_filter_types application/javascript application/json text/xml text/css; sub_filter '$proxy_host' '$host'; } } # 缓存路径请根据需要更改 proxy_cache_path /var/tmp/nginx/jsdelivr levels=1:2 use_temp_path=off keys_zone=jsdelivr:300m inactive=30d max_size=30g;之后直接把网站涉及到cdn.jsdelivr.net都改成你自己的就可以了,如果不想改的话直接在你网站nginx配置中加以下内容就可以了sub_filter_once off; sub_filter_types application/javascript application/json text/xml text/css; sub_filter 'cdn.jsdelivr.net' 'jsd.ucbk.cn';
2022年10月11日
393 阅读
1 评论
3 点赞
2021-08-16
Nginx 的配置文件 nginx.conf
Nginx 的配置文件 nginx.conf#user nobody; #主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody账号运行 worker_processes 1; #指定Nginx要开启的进程数 error_log logs/error.log; #用来定义全局错设日志文件的路径和日志名称 #error_log logs/error.log notice; #error_log logs/error.log info; #日志输出级别有debug(最详细),info,notice,warn,error(默认),crit(严重的,最少) 可供选择 #pid logs/nginx.pid; #用来指定进程id的存储文件位置 events { #设定nginx的工作模式(默认epoll)及连接数上限 worker_connections 1024; } #以上这块配置代码是对nginx全局属性的配置 #下面部分是nginx对http服务器相关属性的设置 http { include mime.types; #文件扩展名与文件类型映射表 #default_type application/octet-stream; #默认文件类型,当文件类型未定义时候就使用这类设置的 default_type text/html; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #指定nginx日志的格式 access_log logs/access.log main; #设置日志存储路径/文件名 日志的格式 sendfile on; # 开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝 #tcp_nopush on; #开启tcp_nopush套接字(sendfile开启时有用) #keepalive_timeout 0; #客户端连接超时时间 keepalive_timeout 65; #gzip on; #设置是否开启gzip模块 #下面是server段虚拟主机的配置 server { listen 80; #虚拟主机的服务端口 #listen 80 default_server; #配置成默认端口 server_name localhost; # 用来指定ip或者域名,多个域名用空格分开 #charset koi8-r; access_log logs/host.access.log main; location / { root html; #虚拟主机的网页根目录 index index.html; #默认访问首页文件 } #include /etc/nginx/*.conf; #可以将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; } } }
2021年08月16日
207 阅读
0 评论
1 点赞
2021-08-16
NGINX日志切割
前言Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。access.log 记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log 记录服务器错误的日志;设置access.log在nginx.conf文件里面配置access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; #设置访问日志 access_log off; #关闭访问日志path 指定日志的存放位置。format 指定日志的格式。默认使用预定义的combined。buffer 用来指定日志写入时的缓存大小。默认是64k。gzip 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。flush 设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。if 条件判断。如果指定的条件计算为0或空字符串,那么该请求不会写入日志。另外,还有一个特殊的值off。如果指定了该值,当前作用域下的所有的请求日志都被关闭。示例http { ... ##日志格式使用默认的combined;指定日志的缓存大小为32k;日志写入前启用gzip进行压缩,压缩比使用默认值1;缓存数据有效时间为1分钟。 access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m; ... }access_log指令的作用域分别有http,server,location。log_format自定义格式默认的日志格式log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';tail -f /var/log/nginx/access.log设置error_log错误日志在Nginx中是通过error_log指令实现的。该指令记录服务器和请求处理过程中的错误信息。错误日志不支持自定义。error_log path [level];path参数指定日志的写入位置。level参数指定日志的级别。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值(等级从低到高排列)。只有日志的错误级别等于或高于level指定的值才会写入错误日志中。默认值是error。error_log logs/error.log; error_log logs/error_notice.log notice; error_log logs/error_info.log info; ##可以将不同的错误类型分开存储日志切割测试按分钟分割编写脚本vim logaccess.sh #!/bin/bash #设置日志文件保存目录 LOG_PATH=/var/log/nginx/ #备份文件名称 LOG_BAK="$(date -d "last_minute" + %Y%m%d%H%M)" #重命名日志文件 mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${LOG_BAK}.log # mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${LOG_BAK}.log #向nginx主进程发信号重新打开日志 kill -USR1 `cat /run/nginx.pid`chmod +x logaccess.sh设置定时任务crontab -e #每分钟进行日志切割 */1 * * * * sh /root/logaccess.sh > /dev/null 2>&1按日切割:vim log2.sh #!/bin/bash #设置日志文件保存目录 LOG_PATH=/var/log/nginx/ #备份文件名称 LOG_PATH_BAK="$(date -d "yesterday" +%Y%m%d)" #重命名日志文件 mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${LOG_BAK}.log # mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${LOG_BAK}.log #向nginx主进程发信号重新打开日志 kill -USR1 `cat /run/nginx.pid`设置定时任务crontab -e #每天23:59分开始执行 59 23 * * * sh /root/logaccess.sh > /dev/null 2>&1
2021年08月16日
445 阅读
0 评论
1 点赞
2021-06-15
Nginx-基础总结(下)
根据域名自定义跳转if ( $host = 'www.baidu.com' ) { rewrite ^/(.*)$ http://baidu.com/$1 permanent; }浏览器的类型,作出相应的跳转# 根据浏览器头部 URL 重写到指定目录 if ($http_user_agent ~* MSIE) { rewrite ^(.*)$ /msie/$1 break; } # 判断是否是手机端 if ( $http_user_agent ~* "(Android|iPhone|Windows Phone|UC|Kindle)" ) { rewrite ^/(.*)$ http://m.qp.com$uri redirect; }禁止访问目录|文件location ~* \.(txt|doc)${ root /data/www/wwwroot/linuxtone/test; deny all; }如果前端是反向代理的情况下:location /admin/ { allow 192.168.1.0/24; deny all; } # 后端 # set $allow false; # if ($allow = false) { return 403;} if ($http_x_forwarded_for !~* ^192\.168\.1\.*) { return 403; }添加模块–支持 WebsockNginx 动态添加模块版本平滑升级,和添加模块操作类似准备模块这里以 nginx-push-stream-module 为例,模块我放在 /data/module 下,你也可以放在其他位置mkdir -p /data/module && cd /data/module/ git clone http://github.com/wandenberg/nginx-push-stream-module.git查看 Nginx 已安装模块/usr/local/nginx/sbin/nginx -V --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre 备份源执行文件 备份原来的 nginx 可执行文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak 有必要的话,可以再备份下配置文件,以防万一下载源码编译下载相同版本的 Nginx 源码包编译(以前安装时的源码包),如果已经删除了可重新下载,版本相同即可wget http://nginx.org/download/nginx-1.16.1.tar.gz tar xf nginx-1.16.1.tar.gz cd nginx-1.16.1 ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre --add-module=/data/module/nginx-push-stream-module编译Nginx(千万不要make install,不然就真的覆盖了)make mv objs/nginx /usr/local/nginx/sbin/ 查看是否安装 /usr/local/nginx/sbin/nginx -V --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-pcre --add-module=/data/module/nginx-push-stream-module 添加模块–支持健康检查模块缺陷?自带健康检查的缺陷:Nginx 只有当有访问时后,才发起对后端节点探测。如果本次请求中,节点正好出现故障,Nginx 依然将请求转交给故障的节点,然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。但是会影响效率,因为多了一次转发自带模块无法做到预警被动健康检查使用第三访模块 nginx_upstream_check_module:区别于 nginx 自带的非主动式的心跳检测,淘宝开发的 tengine 自带了一个提供主动式后端服务器心跳检测模块若健康检查包类型为 http,在开启健康检查功能后,nginx 会根据设置的间隔向指定的后端服务器端口发送健康检查包,并根据期望的 HTTP 回复状态码来判断服务是否健康。后端真实节点不可用,则请求不会转发到故障节点故障节点恢复后,请求正常转发准备模块yum install patch git -y cd /usr/local/src git clone https://github.com/yaoweibin/nginx_upstream_check_module.git打补丁需进入源码包打补丁个人习惯,源码放在 /usr/local/src例如我的 nginx 源码包存放: /usr/local/src/nginx-1.16.1 , 若源码已经删除,那么去官网上再下载同版本cd /usr/local/src/nginx-1.16.1 patch -p1 < ../nginx_upstream_check_module/check_1.16.1+.patch重新编译nginx -V # configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx_upstream_check_module/ # 在运行中的 nginx 添加模块; 首先一点: 修改东西之前要先备份 mv /usr/loca/nginx/sbin/nginx{,_bak} ./configure --prefix=/usr/local/nginx \ --user=www --group=www \ --with-http_ssl_module \ --with-http_stub_status_module \ --add-module=../nginx_upstream_check_module make # **别手贱, 千万不要 make install** cp objs/nginx /usr/local/nginx/sbin/ 查看模块 nginx -V configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx_upstream_check_module如何使用?http { upstream cluster { server 192.168.0.1:80; server 192.168.0.2:80; server 127.0.0.1:80; check interval=5000 rise=1 fall=3 timeout=4000; #check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello; #check interval=3000 rise=2 fall=5 timeout=1000 type=http; #check_http_send "HEAD / HTTP/1.0\r\n\r\n"; #check_http_expect_alive http_2xx http_3xx; } server { listen 80; location / { proxy_pass http://cluster; } location /status { # 默认html,请求方式: check_status html|json|xml; # allow 允许的IP地址 check_status; access_log off; allow SOME.IP.ADD.RESS; deny all; } } }kill -USER2 cat /usr/local/nginx/logs/nginx.pid #热升级nginx,如果当前nginx不是用绝对路径下的nginx命令启动的话,热升级无效。只能 nginx -s stop && /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf`验证curl http://127.0.0.1/status?format=http curl http://127.0.0.1/status?format=xml curl http://127.0.0.1/status?format=json """ {"servers": { "total": 3, "generation": 2, "server": [ {"index": 0, "upstream": "cluster", "name": "192.168.0.1:80", "status": "down", "rise": 0, "fall": 432, "type": "tcp", "port": 0}, {"index": 1, "upstream": "cluster", "name": "192.168.0.2:80", "status": "down", "rise": 0, "fall": 432, "type": "tcp", "port": 0}, {"index": 2, "upstream": "cluster", "name": "127.0.0.1:80", "status": "up", "rise": 4, "fall": 0, "type": "tcp", "port": 0} ] }} """注意事项如果后端是基于域名访问,可使用 check_http_send “GET /xxx HTTP/1.0rn HOST www.xxx.comrnrn”;方式在请求时添加请求头信息参数详解interval: 检测间隔 3 秒 fall: 连续检测失败次数 5 次时,认定 relaserver is down rise: 连续检测成功 2 次时,认定 relaserver is up timeout: 超时 1 秒 default_down: 初始状态为 down,只有检测通过后才为 up type: 检测类型方式 tcp tcp :tcp 套接字,不建议使用,后端业务未 100%启动完成,前端已经放开访问的情况 ssl_hello: 发送 hello 报文并接收 relaserver 返回的 hello 报文 http: 自定义发送一个请求,判断上游 relaserver 接收并处理 mysql: 连接到 mysql 服务器,判断上游 relaserver 是否还存在 ajp: 发送 AJP Cping 数据包,接收并解析 AJP Cpong 响应以诊断上游 relaserver 是否还存活(AJP tomcat 内置的一种协议) fastcgi: php 程序是否存活GIthub 地址https://github.com/yaoweibin/nginx_upstream_check_module添加模块–支持国家城市模块安装依赖 libmaxmindd因为需要读取在 GeoIP2 的 IP 数据库库,需要使用到 libmaxminddb 中的一个 C 库pay源码wget https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz tar zxvf libmaxminddb-1.3.2.tar.gz cd libmaxminddb-1.3.2 ./configure make make install添加库路径并更新库sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf" ldconfig yum yum install libmaxminddb-devel -y下载 GeoIP 源码wget https://github.com/leev/ngx_http_geoip2_module/archive/3.2.tar.gz tar zxvf 3.2.tar.gzNginx 重新编译 ./configure --prefix=/usr/local/nginx --add-module=../ngx_http_geoip2_module-3.2 make && make install下载 GeoLite这个库是为了将 IP 地址翻译成具体的地址信息,下载需要注册…URL: https://www.maxmind.com/en/accounts/current/people/current 账号: xxxx@qq.com 密码: xxx..gunzip GeoLite2-City.mmdb.gz gunzip GeoLite2-Country.mmdb.gz mkdir /data/geoip mv GeoLite2-City.mmdb /data/geoip/city.mmdb mv GeoLite2-Country.mmdb /data/geoip/country.mmdb启用 GeoIPvim /usr/local/nginx/conf/nginx.conf http { geoip2 /data/geoip/country.mmdb { $geoip2_data_country_code default=CN country iso_code; $geoip2_data_country_name country names en; } geoip2 /data/geoip/city.mmdb { $geoip2_data_city_name default=Shenzhen city names en; } server { listen 80; server_name localhost; location / { add_header geoip2_data_country_code $geoip2_data_country_code; add_header geoip2_data_city_name $geoip2_data_city_name; if ($geoip2_data_country_code = CN){ root /data/webroot/cn; } if ($geoip2_data_country_code = US){ root /data/webroot/us; } } }检查 GeoIPmkdir /data/webroot/us mkdir /data/webroot/cn echo "US Site" > /data/webroot/us/index.html echo "CN Site" > /data/webroot/cn/index.html curl 试一试内置变量http://wiki.nginx.org/HttpCoreModule#Variables 官方文档 $arg_PARAMETER $args $binary_remote_addr $body_bytes_sent $content_length $content_type $cookie_COOKIE $document_root $document_uri $host $hostname $http_HEADER $sent_http_HEADER $is_args $limit_rate $nginx_version $query_string $remote_addr $remote_port $remote_user $request_filename $request_body
2021年06月15日
261 阅读
0 评论
0 点赞
2021-06-15
Nginx-基础总结(上)
常规配置模板#user www www; worker_processes auto; error_log /home/wwwlogs/nginx_error.log crit; #pid /usr/local/nginx/nginx.pid; #Specifies the value for maximum file descriptors that can be opened by this process. worker_rlimit_nofile 655350; events { use epoll; worker_connections 655350; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 60; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_buffer_size 64k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/xml application/json; gzip_vary on; log_format access '$remote_addr - $remote_user [$time_local] $host ' '"$request" $status $body_bytes_sent $request_time ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"' '$upstream_addr $upstream_status $upstream_response_time' ; #设置Web缓存区名称为cache_one,内存缓存空间大小为256MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。 proxy_temp_path /home/proxy_temp_dir; proxy_cache_path /home/proxy_cache_path levels=1:2 keys_zone=cache_one:256m inactive=1d max_size=30g; server { listen 80; server_name _; return 403; } include vhost/*.conf; }以“exmaple.org”为例,如下为基于 upstream 负载均衡模式的配置:upstream example_backend { server 127.0.0.1:9080; server 192.168.1.198:9080; server 172.16.0.4:80 weight=5 max_fails=3 fail_timeout=10s; # 权重、健康监测 server 172.16.0.5:8080 backup; # 备份节点, ip_hash; #调度算法 } server { listen 80; server_name www.example.org example.com .example.org; location / { # 如果后端服务器出现502 或504错误代码的话nginx就不会请求某台服务器了,当后端服务器又工作正常了,nginx继续请求,这样一来达到了后端服务器健康状况检测的功能, proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; proxy_pass http://example_backend; proxy_http_version 1.1; 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_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_buffer_size 8k; proxy_temp_file_write_size 64k; # nginx本地cache开启 proxy_cache cache_one; proxy_cache_valid 200 304 30d; proxy_cache_valid 301 302 404 1m; proxy_cache_valid any 1m; proxy_cache_key $host$request_uri; # 客户端缓存,在header中增加“Expires” expires 30d; add_header Cache-Control public; add_header X-Proxy-Cache $upstream_cache_status; proxy_set_header If-Modified-Since $http_if_modified_since; if_modified_since before; } location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|swf|xml|css|js)$ { proxy_pass http://example_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires 15d; } location ~ .*\.(jhtml)$ { proxy_pass http://example_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires -1; } access_log logs/www.example.org.log; }其他的 proxy 配置:1.proxy_set_header :在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息。2.proxy_connect_timeout:配置Nginx与后端代理服务器尝试建立连接的超时时间。3.proxy_read_timeout : 配置Nginx向后端服务器组发出read请求后,等待相应的超时时间。4.proxy_send_timeout:配置Nginx向后端服务器组发出write请求后,等待相应的超时时间。5.proxy_redirect :用于修改后端服务器返回的响应头中的Location和Refresh。用户认证# htpasswd -bc /usr/local/nginx/auth/passwd admin 123456 vim /usr/local/nginx/conf/vhost/www.conf server { listen 80; server_name www.com; index index.html index.htm; root /www; location / { auth_basic "test"; auth_basic_user_file /usr/local/nginx/auth/passwd; } #service nginx restart解决跨域# 提示: add_header 也可以添加到 server 中,这样当前 server 下都允许跨域 server { listen 3002; server_name localhost; location /ok { proxy_pass http://localhost:3000; # 指定允许跨域的方法,*代表所有 add_header Access-Control-Allow-Methods *; # 预检命令的缓存,如果不缓存每次会发送两次请求 add_header Access-Control-Max-Age 3600; # 带cookie请求需要加上这个字段,并设置为true add_header Access-Control-Allow-Credentials true; # 表示允许这个域跨域调用(客户端发送请求的域名和端口) # $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号 add_header Access-Control-Allow-Origin $http_origin; # 表示请求头的字段 动态获取 add_header Access-Control-Allow-Headers $http_access_control_request_headers; # OPTIONS预检命令,预检命令通过时才发送请求 # 检查请求的类型是不是预检命令 if ($request_method = OPTIONS){ return 200; } } }URL 重写比如说访问某站点的路径为/forum/ , 此时想使用/bbs 来访问此站点需要做 url 重写如下location / { rewrite ^/forum/?$ /bbs/ permanent; } 比如说某站点有个图片服务器(10.0.0.1/p_w_picpaths/ ) 此时访问某站点上/p_w_picpaths/的资源时希望访问到图片服务器上的资源 location / { rewrite ^/p_w_picpaths/(.*\.jpg)$ /p_w_picpaths2/$1 break; }域名跳转server { listen 80; server_name www.com; rewrite ^/ http://www.www.com/; # return 301 http://www.andy.com/; }域名镜像server { listen 80; server_name www.com; rewrite ^/(.*)$ http://www.www.com/$1 last; }判断表达式-f 和 !-f 用来判断是否存在文件-d 和 !-d 用来判断是否存在目录-e 和 !-e 用来判断是否存在文件或目录-x 和 !-x 用来判断文件是否可执行防盗链location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.com; if ($invalid_referer) { rewrite ^/ http://www.com/403.html; }会话保持# ip_hash使用源地址哈希算法,将同一客户端的请求只发往同一个后端服务器(除非该服务器不可用)。 # 问题: 当后端服务器宕机后,session会话丢失;同一客户端会被转发到同一个后端服务器,可能导致负载失衡; upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; } sticky_cookie_insert # 使用sticky_cookie_insert 启用会话亲缘关系,会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一客户端导致负载失衡的情况(需要引入第三方模块才能实现)。 upstream backend { server backend1.example.com; server backend2.example.com; sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/; } server { listen 80; server_name 3evip.cn; location / { proxy_pass http://backend; } }expires:设置浏览器中保持 cookie 的时间domain:定义 cookie 的域path:为 cookie 定义路径日志切割示列一#!/bin/bash # 适合单个网站日志文件 LOGS_PATH=/home/wwwroot/yunwei/logs yesterday=`date +"%F" -d "-1 days"` mv ${LOGS_PATH}/yunwei.log ${LOGS_PATH}/yunwei-${yesterday}.log kill -USR1 $(cat /var/logs/nginx.pid)示列二#nginx日志切割 # Nginx pid NGINX_PID=$(cat /var/logs/nginx.pid) # 多个日志文件 LOGS=(xxx.access.log xxx.access.log) # Nginx日志路径目录 BASH_PATH="/www/wwwlogs" # xxxx年xx月 lOG_PATH=$(date -d yesterday +"%Y%m") # 昨天日期 DAY=$(date -d yesterday +"%d") # 循环移动 for log in ${LOGS[@]} do # 先判断日志目录是否存在 [[ ! -d "${BASH_PATH}/${lOG_PATH}" ]] && mkdir -p ${BASH_PATH}/${lOG_PATH} # 进入日志目录 cd ${BASH_PATH} mv ${log} ${lOG_PATH}/${DAY}-${log} #kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'` kill -USR1 ${NGINX_PID} # 删除30天的备份,最好是移动到其他位置,不建议 rm -fr #find ${BASH_PATH}/${lOG_PATH} -mtime +30 -name "." -exec rm -fr {} \; done示列三#!/bin/bash #set the path to nginx log files log_files_path="/usr/local/nginx/logs/" log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m") #set nginx log files you want to cut log_files_name=(gw20 gw20-json) #set the path to nginx. nginx_sbin="/usr/bin/nginx" #Set how long you want to save save_days=10 ############################################ #Please do not modify the following script # ############################################ mkdir -p $log_files_dir log_files_num=${#log_files_name[@]} #cut nginx log files for((i=0;i<$log_files_num;i++));do mv ${log_files_path}${log_files_name[i]}.log ${log_files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log done #delete 30 days ago nginx log files find $log_files_path -mtime +$save_days -exec rm -rf {} \; $nginx_sbin -s reload示列四server{ if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') { set $day $1; } access_log /www/wwwlogs/xxx.com-$day.log main; error_log /www/wwwlogs/xxx.com.error.log; }动静分离为加快网站解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的 tomcat 的时候比较明显,因为 tomcat 解析静态很慢,简单来说,是使用正则表达式匹配过滤,交给不同的服务器。1、准备环境192.168.62.159 代理服务器 192.168.62.157 动态资源 192.168.62.155 静态资源2、配置 nginx 反向代理 upstream[root@nginx-server conf.d]# cat upstream.conf upstream static { server 192.168.62.155:80 weight=1 max_fails=1 fail_timeout=60s; } upstream phpserver { server 192.168.62.157:80 weight=1 max_fails=1 fail_timeout=60s; } server { listen 80; server_name localhost; #动态资源加载 location ~ \.(php|jsp)$ { proxy_pass http://phpserver; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #静态资源加载 location ~ .*\.(html|gif|jpg|png|bmp|swf|css|js)$ { proxy_pass http://static; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }3、192.168.62.155 静态资源#静态资源配置 server { listen 80; server_name localhost; location ~ \.(html|jpg|png|js|css|gif|bmp|jpeg) { root /home/www/nginx; index index.html index.htm; } }4、192.168.62.157 动态资源server { listen 80; server_name localhost; location ~ \.php$ { root /home/nginx/html; #指定网站目录 fastcgi_pass 127.0.0.1:9000; #指定访问地址 fastcgi_index index.php; #指定默认文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #站点根目录,取决于root配置项 include fastcgi_params; #包含nginx常量定义 } }location 优先级当有多条 location 规则时,nginx 有一套比较复杂的规则,优先级如下: `精确匹配= `前缀匹配^~(立刻停止后续的正则搜索) `按文件中顺序的正则匹配~或~* `匹配不带任何修饰的前缀匹配。 这个规则大体的思路是 `先精确匹配,没有则查找带有^~的前缀匹配,没有则进行正则匹配,最后才返回前缀匹配的结果(如果有的话)HTTPS 使用自颁发证书实现建立存放https证书的目录mkdir -pv /usr/local/nginx/conf/.sslkey生成网站私钥文件cd /usr/local/nginx/conf/.sslkey openssl genrsa -out https.key 1024生存网站证书文件,需要注意的是在生成的过程中需要输入一些信息根据自己的需要输入,但Common Name 项输入的必须是访问网站的FQDNopenssl req -new -x509 -key https.key -out https.crt为了安全起见,将存放证书的目录权限设置为400chmod -R 400 /usr/local/nginx/conf/.sslkey vim /usr/local/nginx/conf/vhost/www.conf server { listen 443; server_name www.com; index index.html index.htm; root /www; ssl on; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; ssl_certificate /usr/local/nginx/conf/.sslkey/https.crt; ssl_certificate_key /usr/local/nginx/conf/.sslkey/https.key; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; } #重新启动nginx服务 service nginx restar 基于 HTTPS 配置核心配置 upstream example_backend { server 127.0.0.1:9080; server 192.168.1.198:9080; } server { listen 80; server_name www.example.org example.org; rewrite ^/(.*)$ https://$host/$1 last; } server { listen 443; server_name www.example.org example.org; ssl on; ssl_certificate /usr/local/nginx/conf/ssl/example.crt; ssl_certificate_key /usr/local/nginx/conf/ssl/example.key; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.2 TLSv1.1; ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP; ssl_prefer_server_ciphers on; location / { ... } }根据页面不存在则自定义跳转if (!-f $request_filename) { rewrite ^(/.*)$ http://www.com permanent; }根据文件类型设置过期时间location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ { if (-f $request_filename) { expires 1h; break; } }
2021年06月15日
324 阅读
0 评论
0 点赞
2021-06-10
nginx负载均衡的5种策略
{mtitle title="负载均衡策略"/}轮询默认方式weight权重方式ip_hash依据IP分配方式least_conn最少连接数fail(第三方)响应时间url_hash(第三方)依据URL分配方式1、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。参数:fail_timeout与max_fails结合使用.max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了fail_time服务器会被认为停机的时间长度,默认为10s。backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。down标记服务器永久停机了。注意:在轮询中,如果服务器down掉了,会自动剔除该服务器。缺省配置就是轮询策略。此策略适合服务器配置相当,无状态且短平快的服务使用。upstream backserver { server 172.16.1.7; server 172.16.1.8 backup; server 172.16.1.9 max_fails=3 fail_timeout=20s; } server { listen 80; location / { proxy_pass http://backserver ; } }2、指定权重指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。upstream backserver { server 172.16.1.7 weight=10; server 172.16.1.8 weight=6; server 172.16.1.9; } server { listen 80; location / { proxy_pass http://backserver ; } }3、IP绑定 ip_hash每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。upstream backserver { ip_hash; server 172.16.1.7:88; server 172.16.1.8:80; server 172.16.1.9; } server { listen 80; location / { proxy_pass http://backserver ; } }4、fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。upstream backserver { server 172.16.1.7; server 172.16.1.8; server 172.16.1.9; fair; } server { listen 80; location / { proxy_pass http://backserver ; } }5、url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。upstream backserver { hash $request_uri consistent; server 172.16.1.7; server 172.16.1.8; server 172.16.1.9; } server { listen 80; location / { proxy_pass http://backserver ; } }session共享问题 在最简单的一主一备、负载均衡的集群下,比如两台tomcat服务器和一台nginx负载均衡服务器。当用户访问时,nginx分配给tomcat1服务器处理登陆业务,用户登陆成功,在tomcat1记录了其登陆信息,当页面刷新时,nginx将用户请求分配给tomcat2服务器,在tomcat2服务器上没有用户登陆session,这样就需要用户再次登陆,如果足够巧合,刚好再次登陆的请求转到tomcat1服务器,显示用户登陆,再次刷新刚好又分配给tomcat2服务器,又没有登陆,甚至形成既登陆又没有登陆的矛盾局面。这就造成了不好的体验。 一般的解决办法是,tomcat服务器之间开启session共享广播,当tomcat1服务器记录了session数据后,就广播给其他tomcat服务器。但是,tomcat的session共享的节点数是有上限的。当集群中配置的tomcat节点机到达一定数量后(一般是5个),节点内部通信的流量可能被session广播占满,导致无法顺畅的处理其他业务,特别是难以适应高并发的场景。 避免session广播形成节点上限的解决办法是,配置单点登录的session服务器,适应redis缓存模拟session保存登陆信息。 解决nginx负载均衡的session共享问题
2021年06月10日
416 阅读
0 评论
0 点赞
2021-06-09
[NGINX]禁止IP访问网站
在配置文件中添加以下内容server { listen 80 default; server_name _; return 403; #或者添加 rewrite /^ https:www.ucbk.cn; }最后重启nginxsystemctl reload nginx
2021年06月09日
201 阅读
0 评论
0 点赞
2021-06-07
Nginx配置ssl证书
1、申请ssl证书 腾讯云 阿里云 2、上传证书申请证书之后上传证书到服务器,上传目录可自己选择也可自己创建一个目录,只要下面配置文件中证书路径对就行,我上传到了/etc/nginx/ssl_key/ 下面以下是我自己网站环境进行配置的,仅供参考 腾讯云nginx官方配置文档 3.配置conf文件(方法一)vim /etc/nginx/conf.d/www.conf #添加以下内容 server 里面 listen 443 ssl; #证书路径 ssl_certificate ssl_key/www.ucbk.cn_bundle.crt; ssl_certificate_key ssl_key/www.ucbk.cn.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on;检查配置文件并重启nginxnginx -t systemctl reload nginx看到上图就说明证书安装成功了现在还差最后一步就是HTTP 自动跳转 HTTPS在server中添加if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; }方法二:www.conf配置文件添加rewrite .* https://$host$request_uri redirect;,根据实际情况server { listen 443 ssl; server_name www.ucbk.cn; ssl_certificate /etc/nginx/ssl_key/www.ucbk.cn_bundle.crt; ssl_certificate_key /etc/nginx/ssl_key/www.ucbk.cn.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; root /html/www; index index.php indx.html; location ~ \.php$ { # root /html/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include proxy_params; } } server { listen 80; server_name www.ucbk.cn; #zkset.com; rewrite .* https://$host$request_uri redirect; }
2021年06月07日
522 阅读
0 评论
0 点赞
2021-06-04
Nginx负载均衡
角色外网IP内网IP主机名LB0110.0.0.5172.16.1.5lb01web0110.0.0.7172.16.1.7web01web0210.0.0.8172.16.1.8web02web01:mkdir /html/www -p echo "xiaobai" > /html/www/index.html vim /etc/nginx/conf.d/www.conf server { listen 80; server_name ucbk.cn; #root /html/www; location / { root /html/www; index index.html index.htm; include proxy_params; } } systemctl reload nginxweb02:mkdir /html/www -p echo "xiaohei" > /html/www/index.html vim /etc/nginx/conf.d/www.conf server { listen 80; server_name ucbk.cn; #root /html/www; location / { root /html/www; index index.html index.htm; include proxy_params; } } systemctl reload nginx负载均衡服务器vim /etc/nginx/conf.d/lb_web.conf upstream web{ server 172.16.1.7:80; server 172.16.1.8:80; } server { listen 80; server_name ucbk.cn; location / { proxy_pass http://web; include proxy_params; } } systemctl restart nginx Nginx负载均衡后端状态后端Web服务器在前端Nginx负载均衡调度中的状态状态 概述down 当前的server暂时不参与负载均衡backup 预留的备份服务器(备用 )max_ fails 允许请求失败的次数fail_ t imeout 经过max_ fails失败后,服务暂停时间max conns 限制最大的接收连接数
2021年06月04日
178 阅读
0 评论
0 点赞
2021-06-03
Nginx反向代理
Nginx代理
2021年06月03日
381 阅读
0 评论
1 点赞