提供一份nginx配置文件实例,包含以下功能;
- 静态资源下载
- 负载均衡
- 正则表达式
- ssl配置
示例代码
#--服务代理组件 upstream cmc-terminal-m1-gateway { # 同一个用户,登陆了A,一直访问A,第二个用户访问的时候才会访问B;(诊对于用户,雨露均沾) ip_hash; #ip:端口 server 127.0.0.1:20000 ; } #--服务代理组件 upstream ftp { # 同一个用户,登陆了A,一直访问A,第二个用户访问的时候才会访问B;(诊对于用户,雨露均沾) ip_hash; #ip:端口 server 192.168.252.72:80 ; } # websocket示例 map $http_upgrade $connection_upgrade { default upgrade; '' close; } # 缓存 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off; # 限制ip访问,只能使用域名访问 server { # 端口号 listen 20166 default_server; # 只能以域名访问 server_name _; return 403; } server { # 端口号 listen 20166; # 只能以域名访问 server_name cloud.xxx.com keepalive_timeout 6000s; client_body_timeout 2000s; send_timeout 3000s; proxy_read_timeout 30000s; # 设置上传文件最大限制 client_max_body_size 200m; # ssl on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 证书路径 ssl_certificate conf.d/xxx/xxx.com.crt; # 请求认证 key 的路径 ssl_certificate_key conf.d/xxx/xxx.com.key; #ssl_session_timeout 10m; #charset koi8-r; # 访问日志 #access_log /var/log/nginx/host.access.log main; # 位置;是要在url上输入的名字 location / { # docs:指的是定义的upstream的名字 proxy_pass http://cmc-terminal-m1-gateway; # 在转发的时候,把真实的ip带上 proxy_set_header X-Real-IP $remote_addr; # 在转发的时候,把真实的端口带上 proxy_set_header Host $host:$server_port; # 转发后台带上协议 proxy_set_header X-Forwarded-Proto $scheme; } # 前端根目录(前端vue部署,不用每次都强制刷新页面或者开启无痕) location / { # 访问的目录 + 虚拟目录(location 后面的值) root /data/resources/erp/; # 自动的索引:打开 autoindex on; # 大小以,kb,mb,显示 autoindex_exact_size off ; # 以本地时间显示 autoindex_localtime on; proxy_set_header Host $host:$server_port; # html不缓存 location ~ \.html$ { add_header Cache-Control no-cache; } #静态资源带hash,强制缓存 location ~ \.(js|css|png|jpg|woff2)$ { add_header Cache-Control max-age=31536000; } } location ~ ^/(ftp|aa) { # docs:指的是定义的upstream的名字 proxy_pass http://erpPc; # 在转发的时候,把真实的ip带上 proxy_set_header X-Real-IP $remote_addr; # 在转发的时候,把真实的端口带上 proxy_set_header Host $host:11300; } location /head_web { # 访问的目录 + 虚拟目录(location 后面的值) root /data/ftp/fuser/; # 自动的索引:打开 autoindex on; # 大小以,kb,mb,显示 autoindex_exact_size off ; # 以本地时间显示 autoindex_localtime on; } # 位置;是要在url上输入的名字 location ~ .*\.(gif|jpg|jpeg|bmp|png|mp3|wma|mp4|swf|txt|docx|doc|xls|xlsx)$ { # 访问的目录 + 虚拟目录(location 后面的值) root /data/ftp/tmkj/; add_header Content-Disposition "attachment; filename=$arg_filename"; proxy_cache imooc_cache; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; } # 去掉二级目录 location /test/aa { # docs:指的是定义的upstream的名字 proxy_pass http://erpPc; # 在转发的时候,把真实的ip带上 proxy_set_header X-Real-IP $remote_addr; # 在转发的时候,把真实的端口带上 proxy_set_header Host $host:11300; rewrite "^/test/(.*)$" /$1 break; } # websocket示例 location /xxx{ proxy_pass http://xxx; proxy_redirect off; proxy_set_header Host $host:50070; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # 防盗链 location ~/ERP/.*\.(jpg|png|gif|jpeg)$ { valid_referers xxx.xxx.com; if ($invalid_referer) { return 403; } proxy_pass http://erpftp; proxy_redirect off; proxy_set_header Host $host:6261; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 497 https://$host:$server_port$uri$is_args$args; }核心配置文件示例:
#user nobody; worker_processes 4; #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; # 关闭服务器版本 server_tokens off; # 只允许同域名的嵌套网页 add_header X-Frame-Options SAMEORIGIN; # 上传文件的限制大小 client_max_body_size 5000m; #add_header X-Content-Type-Options 'nosniff'; add_header X-Download-Options "noopen" always; add_header X-Permitted-Cross-Domain-Policies "master-only" always; add_header Referrer-Policy "same-origin" always; #配置跨域 add_header Access-Control-Allow-Origin 'http://xxx.xxx.com:xxx'; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header Access-Control-Allow-Headers *; gzip on; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 包含其他以conf结论的配置文件 include /usr/local/nginx/conf.d/*.conf; }nginx日志文件太大,自动切割日志文件的批量脚本,增加crond定时任务
#!/bin/bash #function:cut nginx log files for lnmp v0.5 and v0.6 #author: http://lnmp.org # 设置日志文件的路径 log_files_path="/usr/local/nginx/logs/" # 日志文件路径增加日志 log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")$(date -d "yesterday" +"%m") # 设置切割的日志文件 # log_files_name=(access vpser licess) log_files_name=(access) # 设置nginx的访问路径set the path to nginx. nginx_sbin="/usr/local/nginx/sbin/nginx" # 设置保存的天数 save_days=5 echo '==配置信息:日志文件路径:'$log_files_dir',保存天数:'$save_days ############################################ # 执行切割的脚本 ############################################ # 创建日志文件的目录 mkdir -p $log_files_dir # 日志文件数量 log_files_num=${#log_files_name[@]} echo '==日志文件数量:'$log_files_num # 切割日志文件 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 echo '==日志文件数量,正在移动:'${log_files_path}${log_files_name[i]}'.log' done # 删除指定天数的日志 find $log_files_path -mtime +$save_days -exec rm -rf {} \; $nginx_sbin -s reload切分tomcat的catalina.out文件
方法一:
#!/bin/bash # 需要开启定时任务一天执行一次 DATE=`date "+%Y-%m-%d"` # 设置日志文件的路径 log_files_path="/data/tomcat/apache-tomcat-9.0.84_erp_1/logs/" # 设置切割的日志文件 # log_files_name=(access vpser licess) log_files_name=catalina.out # 设置保存的天数 save_days=5 echo '==配置信息:日志文件路径:'$log_files_path',保存天数:'$save_days ############################################ # 执行切割的脚本 ############################################ # 创建日志文件的目录 cp $log_files_path${log_files_name} $log_files_path${log_files_name}'.'$DATE wait # 删除指定天数的日志 find $log_files_path -mtime +$save_days -exec rm -rf {} \; echo '' > $log_files_path'catalina.out'