[toc]
线上服务配置参数明细
问答nginx 反向代理的作用
1、使用反向代理可以理解为7层应用层的负载均衡,使用负载均衡之后可以非常便捷的横向扩展服务器集群,实现集群整体并发能力、抗压能力的提高。
2、通常反向代理服务器会带有本地 Cache 功能,通过静态资源的 Cache,有效的减少后端服务器所承载的压力,从而提高性能。磨刀意识
1、关于任何操作配置,最好先搞明白操作或配置的原理,然后再去操作。应一句话叫做“磨刀不误砍柴功”,而且对于类似的操作可以举一反三。
nginx服务配置项
1、 nginx 全局配置明细
# 默认 /etc/nginx/nginx.conf 全局配置文件 #指定nginx worker进程运行用户以及用户组,也可以是 user www-data www-data; user www-data; # 指明nginx要开启的进程数为4,一般为CPU核心数的1到2倍; worker_processes 4; # nginx pid文件存放位置 pid /run/nginx.pid; # events {这里都是nginx的事件模块} events { # worker_connetctions 是指nginx最大的并发连接数; worker_connections 768; } # http {设定http服务} http { # 设置nginx上传文件最大限制 client_max_body_size 50m; # 配置可以提高 Nginx 静态资源托管效率。sendfile 是一个系统调用,直接在内核空间完成文件发送,不需要先 read 再 write,没有上下文切换开销; sendfile on; # Nginx 里统一用 tcp_nopush 来控制它,只有在启用了 sendfile 之后才生效,启用它之后,数据包会累计到一定大小之后才会发送,减小了额外开销,提高网络效率; tcp_nopush on; # 启用后会禁用 Nagle 算法,尽快发送数据,Nginx 只会针对处于 keep-alive 状态的 TCP 连接才会启用; tcp_nodelay on; # 长连接超时时间,单位是秒,长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传 # 65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。 keepalive_timeout 65; # types_hash_max_size 影响散列表的冲突率。types_hash_max_size越大,就会消耗更多的内存 # 但散列key的冲突率会降低,检索速度就更快 # types_hash_max_size越小,消耗的内存就越小,但散列key的冲突率可能上升 types_hash_max_size 2048; # 定义 mime 配置文件的文位 include /etc/nginx/mime.types; # 当用户请求的文件类型 不在服务器定义的mime类型映射时,使用DefaultType default_type application/octet-stream; # 定义nginx正常访问日志位置 access_log /var/log/nginx/access.log; # 定义nginx错误访问日志位置 error_log /var/log/nginx/error.log; # 开启nginx压缩功能,压缩的过程是个消耗CPU的过程,而压缩过后传输过程可以节省带宽; gzip on; # 对于microsoft explorer 6 不启用gzip压缩功能; gzip_disable "msie6"; # nginx 虚拟服务器配置文件所在目录; include /etc/nginx/conf.d/*.conf; # nginx 虚拟服务器配置文件所在目录; include /etc/nginx/sites-enabled/*.conf; }
2、 nginx 默认80重定向443配置
# 每个server代表一台虚拟主机; server { # listen 80 监听80端口; listen 80; # server_name _; 定义任意域名; server_name _; # 将返回301的重写到https://源服务器源uri; return 301 https://$HOST$request_uri; # 将server_name 永久的将任意字符开头结尾的 重写至https://源主机源uri位置; # server_name test.com; # rewrite ^(.*)$ https://$host$1 permanent; }
3、 nginx 线上虚拟主机配置
# 每个server代表到哪虚拟主机; server { # 监听https传输协议的443端口,ssl为采用加密传输,并且身份证明; listen 443 ssl; # ssl安全传输开启; ssl on; # 注在apache中证书与加密传输还有pem是三个文件 # ssl授权证书文件,也可以理解为身份的证明文件; ssl_certificate /home/admin/api_ssl/server.crt; # ssl加密文件,数据传输过程中,通过此密钥文件将传送的数据加密码; ssl_certificate_key /home/admin/api_ssl/server.key; # 设置客户端能够重复使用存储在缓存中的会话参数时间为5分钟; ssl_session_timeout 5m; # 指定使用的SSL协议 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; # 指定许可密码的描述。密码以openssl支持的格式指定; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; # 对SSLv3和TLSv1协议的服务器端密码需求优先级高于客户端密码; ssl_prefer_server_ciphers on; # 指定虚拟主机的主机名; server_name api.ssjinyao.com.com; # location 指定匹配规则, / 这里指默认匹配项; location / { # 将匹配到的location反代到至http://127.0.0.1:17777; proxy_pass http://127.0.0.1:17777; # 这里是指向 gunicorn host 的服务地址 # 设置反向代理的请求头部host为源http的请求host; proxy_set_header Host $host; # 设置反向代理的请求头部转发的内容为请求url的源地址; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置将用户的IP赋值给X-Real-IP以供各应用调用; proxy_set_header X-Real-Ip $Remote_addr; # 设置代理缓冲大小为128k proxy_buffer_size 128k; # 设置代理缓冲区间4至 256k proxy_buffers 4 256k; # 设置代理最大缓冲区间为256k; proxy_busy_buffers_size 256k; } }
4、需求-负载均衡配置项:
# 在http段中加入以下配置 # 指定upstream负载均衡模块,指定将要在server中调用的调度服务名称; upstream tewww { # 指定web服务的第一个节点; 注:之后配置使用IP来配置,而不使用域名 server wwwnode1.ssjinyao.com.com:443; # 若有性能较高的服务器,可以采用加权轮询,那么这台服务器的权重是3/5; server wwwnode2.ssjinyao.com.com:443 weight=3; # 指定web服务的第三个节点; server wwwnode3.ssjinyao.com.com:443; }
# 在定义一台虚拟主机; server { listen 443; server_name www.ssjinyao.com.com; ssl on; ssl_certificate /etc/nginx/te_ssl/ssjinyao.com.crt; ssl_certificate_key /etc/nginx/te_ssl/ssjinyao.com.key; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; location / { # 指定反代的服务器,为tewww负载均衡集群; proxy_pass http://tewww; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
5、nginx操作注意项
a、不影响其它服务的情况下重读配置文件, 一定要先对nginx的配置语法进行测试; # sudo nginx -t b、在没有nginx监听端口变更的情况下,则不要重启服务; # sudo nginx -s reload c、如上,反之,则必需重启服务器 # sudo nginx -s restart # sudo /etc/init.d/nginx restart
6、nginx监控
服务端的监控,监控nginx 443端口,80端口, 最近最后一次值不为1时报警;
7、手头存一份标准的配置文件
8、一次比较复杂的虚拟主机配置
server { listen 80; server_name jr.local.ssjinyao.com; charset gb2312; access_log /Users/zlz/wwwroot/logs/jr.access.log; location / { root /Users/zlz/wwwroot/dedecms/a/bank; index index.html index.htm index.php; location ~ \.php$ { # default_type text/html; # add_header Content-Type 'text/html; charset=utf-8'; # return 200 "$document_root , $fastcgi_script_name"; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } location /zt { alias /Users/zlz/wwwroot/dedecms/zt; #default_type text/html; #add_header Content-Type 'text/html; charset=utf-8'; #return 200 "<h1>十月十七</h1>"; location ~ /zt/(.*)\.php(.*)$ { #default_type text/html; #add_header Content-Type 'text/html; charset=utf-8'; #return 200 "$document_root , $fastcgi_script_name"; alias /Users/zlz/wwwroot/dedecms; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ /\.ht { deny all; } } # proxy_pass http://127.0.0.1:8080/; #/Users/zlz/wwwroot/dedecms/zt; #proxy_pass http://127.0.0.1:8089/;
补充一伪静态的重写,即 ww.ssjinyao.com/xxxx/xxxxx 重写至 www.ssjinyao.com/xxxx/xxxx/
rewrite /(.*) https://www.ssjinyao.com/$1/ permanent;
rewrite 直接重写目录
rewrite 301
rewrite ^/zhaokao/ /list/zhaokao/ permanent; rewrite ^/szrd/ /list/szrd/ permanent;
rewrite 302
rewrite ^/zhaokao/ /list/zhaokao/ redirect; rewrite ^/szrd/ /list/szrd/ redirect;
nginx php-fpm 安全项配置
# php-fpm.conf security.limit_extensions = .php .php2 .php4 .php5 .php7 .html .htm # nginx vhosts location ~* ^/jt/.*.(php|php3|php4|php5)$ {deny all;} # 测试访问调度 location ~ \.php|\.php7|\.html|.htm$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 600; } }
redis服务配置项
1、redis持久化配置
注: 若不需要则关闭以下配置;
# 持久化数据保存规则 # 自己支实现一下 # 900 秒内如果至少有 1 个 key 的值变化,则保存 # 300 秒内如果至少有 10 个 key 的值变化,则保存 # 60 秒内如果至少有 10000 个 key 的值变化,则保存 save 900 1 save 300 10 save 60 10000 # redis持久化保存数据配置 stop-writes-on-bgsave-error yes # 数据保存的位置 dir /usr/local/redis/db/ # 数据库的文件名称,另外要确定数据保存的位置redis有owner权限 dbfilename dump.rdb
2、redis是否需要外网连接;
# 绑定的ip # bind 127.0.0.1 # port 6379 或者port 25133 # 若需要外网连接,则 # bind 0.0.0.0 # port 6379 或者port 25133 注: 另外还需要在阿里云上添加对应的需要访问的地址白名单与端口白名单;
3、目前三条业务线上的redis数据重要性
# 配置未开持久化,保存的数据皆为临时数据,可以清空; # 配置已经开启持久化,保存的数据为数据索引;数据不可以清空; # 配置已经开启持久化,保存的数据为用户数据;数据不可以清空; 注: 不论数据是否为临时数据,每次对服务器的操作都要先对数据临时保存,确保操作后不会造成数据丢失; # 操作过程如下 # redis-cli 127.0.0.1:6379> AUTH Amdce0De1fxxxxx OK 127.0.0.1:6379> CONFIG SET dir "/usr/local/redis/db" OK 127.0.0.1:6379> SAVE OK 127.0.0.1:6379>
4、掌握redis重启命令
# /etc/init.d/redis-server stop # /etc/init.d/redis-server start # /etc/init.d/redis-server restart # redis-cli -h 127.0.0.1 -p 6379 shutdown # kill -9 REDISPID
5、redis监控
a、监控服务redis端口 25133 或者 6379
6、记得在/etc/redis/redis.conf中要配置密码
# requirepass Amdce0De1fxxxxx
7、注意白名单配置,让线上的服务器可以访问;
mongo服务配置项
1、保证有需要开机自启mongo的服务器,开机启动mongo
# 在mongo的/etc/rc.local中加入以下内容 # mongod --auth --fork -f /etc/mongod.conf # 并保证 /etc/rc.local有执行权限
2、保证线上使用的mongo服务器都是3.4的
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv # 0C49F3730359A14518585931BC711F9BA15703C6 # echo "deb [ arch=amd64 ] http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-3.4.list' # sudo apt-get update # sudo apt-get install mongodb-org # sudo killall mongod # sudo echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled # sudo echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag # sudo service mongod restart # sudo chkconfig mongod on
3、会对用户的操作(增/删/改/查)
# 添加admin用户 use admin db.auth("admin","passwdxxxxxxxxxxx") use bc_ccc db.createUser( { user:"ht_eedu", pwd:'ht_eedom99xxx', roles:[ {role:"dbOwner",db:'ht_eedu'} ] } ) db.createUser( { user:"admin", pwd:'passwdxxxxxxxxxxx', roles:[ {role:"dbOwner",db:'test'} ] } ) db.createUser( { user:"admin", pwd:'passwdxxxxxxxxxxx', roles:[ {role:"userAdminAnyDatabase",db:'admin'} ] } ) # 添加对应数据库的用户 use te_data; db.createUser( { user:"admin", pwd:'passwdxxxxxxxxxxxx', roles:[ {role:"dbOwner",db:'test_data'} ] } ) # 删除用户 db.dropUser("test_data") db.createUser( { user:"test_data_read", pwd:'passwdxxxxxxxxxxx', roles:[ {role:"read",db:'test_data'} ] } ) db.createUser( { user:"test_read", pwd:'passwdxxxxxxxxxxx', roles:[ {role:"read",db:'test'} ] } ) # 修改用户密码 db.changeUserPassword('admin','passwdxxxxxxxxxxxx'); # 查看目前存在的用户 > show dbs admin 0.000GB bac_data 0.000GB kk 0.000GB local 0.000GB migrate_data 0.000GB te_data 0.031GB > show users { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } > use trisk_tmp > show users; > db.dropAllUsers() # 在库中增新建表 use bm_kyc db.createCollection("ep_search") db.createCollection("screening_sections") # 删除字段 db.screening_sections.remove({'no':'5a279xxxxxxxxx'})
4、数据的备份(导入/导出)
mkdir /tmp/bak/mongo mongodump --db test_kyc --out /tmp/bak/mongo/`date +"%m-%d-%y"` cd /tmp/bak/mongo && tar -cvf xxxx-xx-xx.tar.gz xxxx-xx-xx scp /tmp/bak/mongo/xxxx-xx-xx.tar.gz root@xx.xxx.xx.xxx:/tmp/ crontab -e 3 1 * * * find /tmp/bak/mongo -mtime +7 -exec rm -rf {} \; mongorestore -u admin -p xxxx --db newdb --drop /tmp/bak/mongo 注: --drop 要小心使用
5、php模块编译安装3.4的支持
a、mac 安装php mongo模块的支持 # brew install mongo # brew install mongodb # cd /Library/WebServer/Documents # brew install php56-mongo # 以下为测试连接文件 ➜ cat index.php <?php $m = new MongoClient('mongodb://admin:passwdxxxxxxxxxxx@47.92.xxx.xxxx:20911/bc_ccc'); echo "Connection to database successfully"; // 选择一个数据库 $db = $m->bm_kyc; echo "Database mydb selected"; ?> ➜ cat test2.php <?php phpinfo(); ?> # sudo vim /etc/php.ini extension=/usr/local/opt/php56-mongodb/mongodb.so extension=/usr/local/opt/php56-mongo/mongo.so b、ubuntu 安装 php mongo模块的支持 # cd root && wget https://github.com/mongodb/mongo-php-driver-legacy/archive/master.zip # cd root && unzip master.zip # cd /root/mongo-php-driver-legacy-master/ # phpize # ./configure # make # make install # ls /usr/lib/php5/20121212/mongo.so # vim /etc/php5/apache2/php.ini extension = /usr/lib/php5/20121212/mongo.so # apachectl restart 测试 ➜ cat index.php <?php $m = new MongoClient('mongodb://admin:passwdxxxxxxxxxxx@47.92.162.27:20911/bc_ccc'); echo "Connection to database successfully"; // 选择一个数据库 $db = $m->bc_ccc; echo "Database mydb selected"; ?> ➜ cat test2.php <?php phpinfo(); ?> # 访问test2.php可以过滤到以下内容 MONGODB-CR enabled SCRAM-SHA-1 enabled MONGODB-X509 enabled GSSAPI (Kerberos) disabled PLAIN disabled
6、注意白名单配置,让线上的服务器可以访问;
net: port =20133 # 配置mongo监听地址 bind_ip =0.0.0.0 # 配置绑定的IP
7、 注意配置文件中开启auth认证
auth =true
8、代码中不支持带有@的密码
mysql服务配置项
# 注意清空连接mysql的使用记录 # 注意数据库的备份文件所在的服务器只能以密钥登录 # 注意RDS的使用率
apache服务配置项
1、apache全局配置项
Mutex file:${APACHE_LOCK_DIR} default PidFile ${APACHE_PID_FILE} Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} # 使得主机名能被记入日志 HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log # 定义apache记录日志的级别为warn LogLevel warn #加载模块配置文件,虚拟主机配置文件,与端配置文件 IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf Include ports.conf # 定义不允许访问站点根目录索引 <Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /usr/share> AllowOverride None Require all granted </Directory> # 允许在/var/www/中建立url <Directory /var/www/> AllowOverride All Require all granted </Directory> # 定义允许访问的用户, .htaccess定义了用户名 AccessFileName .htaccess # 拒绝所以 任意以.ht后缀结尾的文件 <FilesMatch "^\.ht"> Require all denied </FilesMatch> # 定义 vhost_combined combined comman referer的四种日志格式,供虚拟主机调用 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent IncludeOptional conf-enabled/*.conf IncludeOptional sites-enabled/*.conf
2、apache虚拟主机配置项
# 指定 VirtualHost 以端口进行定义 <VirtualHost *:8001> # 指定VirtualHost域名 ServerAdmin www.ssjinyao.com.com # 指定虚拟主机url根路径 DocumentRoot /var/www/html/tweb # 指定访问错误日志保路径 ErrorLog ${APACHE_LOG_DIR}/error.log # 指定访问日志保存路径 CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
3、同nginx一样,做完变更之后需要先测试语法再重读,或重起
4、端口配置文件
# 将虚拟主机中所用到的对应端口启动; # Listen 80 Listen 8001 Listen 8002 Listen 8003 Listen 8004 Listen 8101
supvisord 服务配置项
1、更换服务器之后,需要修改服务器的监听地址;
# 部署监听端口的问题 [inet_http_server] ; inet (TCP) server disabled by default port=172.17.xxx.xxx:7558 ; (ip_address:port specifier, *:port for all iface)
2、部署python系统时报依赖问题
cd /home/admin/xbasement/ source ./ENV/bin/activate pip install -r requirements.txt 如果安装软件包存在问题,把对应的软件包给删除;
3、查看对应服务器启动时的报错
admin@iZ2zegjb9m90kxovynpkbzZ:~$ tail -f ~/xbasement/log/xbasement-server-stdout.log File "server.py", line 3, in <module> from tornado.wsgi import WSGIContainer ImportError: No module named tornado.wsgiTraceback (most recent call last): File "server.py", line 3, in <module> from tornado.wsgi import WSGIContainer ImportError: No module named tornado.wsgi Traceback (most recent call last): File "server.py", line 3, in <module> from tornado.wsgi import WSGIContainer ImportError: No module named tornado.wsgi
4、python部署时缺少模块的问题
# 问题如下 supervisor> status customer:customer-0 RUNNING pid 7981, uptime 0:00:19 customer:job-recieve-0 RUNNING pid 7980, uptime 0:00:19 order:api-0 FATAL Exited too quickly (process log may have details) order:forward-job-0 FATAL Exited too quickly (process log may have details) order:order-job-payment-0 FATAL Exited too quickly (process log may have details) order:order-risk-job-0 FATAL Exited too quickly (process log may have details) supervisor> staus *** Unknown syntax: staus supervisor> admin@ssjinyao.com-007:~/torder/venv/lib/python2.7/site-packages$ !tail tail -f torder/log/order-api-out.log from api import app ImportError: No module named api Traceback (most recent call last): File "api/server.py", line 10, in <module> from api import app ImportError: No module named api Traceback (most recent call last): File "api/server.py", line 10, in <module> from api import app ImportError: No module named api # 解决方式 admin@ssjinyao.com-007:~/torder/venv/lib/python2.7/site-packages$ cat v.pth /home/admin/torder admin@ssjinyao.com-007:~/torder/venv/lib/python2.7/site-packages$ pwd /home/admin/torder/venv/lib/python2.7/site-packages admin@ssjinyao.com-007:~/torder/venv/lib/python2.7/site-packages$ history | grep ln ln -s /home/admin/torder/ .
5、加入新工程时,要复制编辑~/opt/supervisord.conf
[include] files = /home/admin/xbasement/config/supervisor/xbasement.server.ini /home/admin/topen/config/supervisor/*.ini /home/admin/cashier/config/supervisor/*.ini
6、部署open 工程时,要把ssl也复制上
7、应用变动时,要注意mongo,redis白名单
zabbix 配置
1、zabbix_agent 配置
# 进程的pid保存的配置 PidFile=/tmp/zabbix_agentd.pid # zabbix_agent 端日志保存位置 LogFile=/var/log/zabbix-agent/zabbix_agentd.log # 日志文件存储大小 LogFileSize=33 # 日志级别 DebugLevel=4 # 注:这个是重点,需要指定zabbix_server端的ip zabbix_server端才能实别 Server=121.xxx.xx.xxx # 监听的端口 ListenPort=10050 # zabbix_agent 端进程监听的地址 ListenIP=0.0.0.0 # zabbix_agent 主动请求服务端时的地址 与 Server配合使用 ServerActive=121.xxx.xx.xxx Hostname=te_server
2、 zabbix_server 端配置
# 指定zabbix_server 端监听的地址 ListenPort=10051 # 指定zabbix_server 产生的日志所保存的文件位置 LogFile=/var/log/zabbixsrv/zabbix_server.log # 指定日志的大小 LogFileSize=0 # 指定zabbix_server PidFile所保存的位置 PidFile=/var/run/zabbixsrv/zabbix_server.pid # 指定zabbix 调用的数据库库名 DBName=zabbix # 指定zabbix 调用的数据库的用户名 DBUser=zabbix # 指定zabbix 使用的数据库密码 DBPassword=centos.xxxxxxxx # 指定mysql的sock文件 DBSocket=/var/lib/mysql/mysql.sock # 指定mysql所监听的端口,注,zabbix_server所占用的数据库不大,且只需要监听本地 DBPort=3306 # 指定zabbix_server 所监听的地址 ListenIP=0.0.0.0 # 指定供zabbix调用的脚本程序(bash || python || perl),目前使用的是bash AlertScriptsPath=/var/lib/zabbixsrv/alertscripts # 自定义监控项时的保存位置 ExternalScripts=/var/lib/zabbixsrv/externalscripts # 指定临时的脚本程序 TmpDir=/var/lib/zabbixsrv/tmp
# 调用接口程序 #!/bin/bash #export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin echo "$2 $3" | /usr/bin/mutt -s "ZABBIX 报警" $1 zabbix.sh #!/bin/bash #Can send weixin mail export path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #/bin/weixin --corpid=ww3bba6a2898b91e69 --corpsecret=3GqhGNZeEYuVvr9SRSyBWCOsbGvNcc6LXAn0uCO24XM --msg="$2 $3" --user="$1" --agentid=1000002 /bin/weixin --corpid=wwfc47b4739f369c7c --corpsecret=hD0ITPFehD8WJm-3ydJVxWamXQYs2l64xPCx9K76doM --msg="$2 $3" --user=$1 --agentid=1000003
# 安装发送邮件报警程序的依赖 # yum -y install msmtp mutt # 邮件发是由系统用户zabbixsrv调用,所以配置文件要在公共配置目录/etc/中配置 # 不可以在 admin/root 或者其它用户下配置 # muttrc 配置项 /etc/muttrc set sendmail="/usr/bin/msmtp" set use_from=yes set realname="15822097176@139.com" set editor="vim" # msmtprc 配置项 /etc/msmtprc account default host smtp.ssjinyao.com port 25 from dev@ssjinyao.com auth login tls off user dev@ssjinyao.com password xxxxxxxxxx
需求, 代码要一条条的写 设计, 先实现再设计优化
线上ssh服务配置项
# 指定ssh默认监听的地址 Port 22 # 指定ssh使用的协议 Protocol 2 # 指定当前服务器使用的私钥 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # 是否让sshd通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。认证成功后,将以该认证用户的身份创建另一个子进程。这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全 UsePrivilegeSeparation yes # 设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。 KeyRegenerationInterval 3600 # Server Key 的加密码强度,强度越大越安全,传输速率也越慢 ServerKeyBits 1024 # sshd 记录日志的级别 LogLevel INFO # 用户登录时可视界面及时间 LoginGraceTime 120 # 当使用者的 host key 改变之后,Server 就不接受联机, StrictModes yes # 使用纯rsa认证方式 RSAAuthentication yes # 是否允许pubkey认证 PubkeyAuthentication yes # 是否取消使用 ~/.ssh/.hosts 来做为认证 IgnoreRhosts yes # 这个选项是专门给 version 1 用的 RhostsRSAAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的 HostbasedAuthentication no #这个项目在是否允许以空的密码登入!# 此项要注意 PermitEmptyPasswords no # 挑战任何的密码认证, 任何 login.conf都能使用 ChallengeResponseAuthentication no # x11转发功能开启,可以使用基于ssh的加密码图形工具 X11Forwarding yes # 自适大小 X11DisplayOffset 10 # 打印Motd信息 PrintMotd no # 登录前后输出日志 PrintLastLog yes # 开启tcp长连接 TCPKeepAlive yes # 设置x11的转输语言及编码 AcceptEnv LANG LC_* # 基于ssh 的vftp服务 Subsystem sftp /usr/lib/openssh/sftp-server #利用 PAM 管理使用者认证 UsePAM yes #使用dns解析 UseDNS no # AddressFamily inet # 允许root用户直接登录 PermitRootLogin yes # 记录系统日志 SyslogFacility AUTHPRIV # 开启用户认证登录 PasswordAuthentication yes