本文共 44065 字,大约阅读时间需要 146 分钟。
主机名 IP地址 client eth0(192.168.4.10/24) proxy eth0(192.168.4.5/24) eth1(192.168.2.5/24) web1 eth1(192.168.2.100/24) web2 eth1(192.168.2.200/24)
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel //安装依赖包[root@proxy ~]# useradd -s /sbin/nologin nginx[root@proxy ~]# tar -xf nginx-1.10.3.tar.gz[root@proxy ~]# cd nginx-1.10.3[root@proxy nginx-1.10.3]# ./configure \> --prefix=/usr/local/nginx 指定安装路径> --user=nginx \ 指定用户> --group=nginx \ 指定组> --with-http_ssl_module 开启SSL加密功能[root@proxy nginx-1.10.3]# make && make install 编译并安装conf 配置文件 html 网页 logs 日质 sbin 程序[root@proxy ~]# /usr/local/nginx/sbin/nginx 启动服务[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop 关闭服务[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload 重新加载配置文件[root@proxy ~]# /usr/local/nginx/sbin/nginx -V 查看软件信息[root@proxy ~]# ln -s /usr/local/nginx/sbin/nginx /sbin/ 方便后期使用[root@proxy ~]# netstat -anptu | grep nginx[root@client ~]# curl http://192.168.4.5 测试首页文件[root@client ~]# firefox http://192.168.4.52.用户认证[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf.. ..server { 35行 listen 80; server_name localhost; auth_basic "Input Password:"; #提示信息 auth_basic_user_file "/usr/local/nginx/pass"; #密码文件 location / { root html; index index.html index.htm; } }[root@proxy ~]# yum -y install httpd-tools[root@proxy ~]# htpasswd -c /usr/local/nginx/pass tom #创建密码文件[root@proxy ~]# htpasswd /usr/local/nginx/pass lsc #追加用户,不使用-c选项[root@proxy ~]# cat /usr/local/nginx/pass[root@proxy ~]# nginx -s reload[root@client ~]# firefox http://192.168.4.5 #输入密码后可以访问[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confserver { 35行 listen 80; 端口 server_name www.A.com; 域名auth_basic "ILY"; 认证提示符auth_basic_user_file "/usr/local/nginx/pass"; 认证密码文件 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; 指定网站根路径 index index.html index.htm; }}........................................:84,93s/#// 把#号替换为空server { 84行 listen 80; 端口 server_name www.B.com; 域名 charset utf-8; 编码(可以打中文) location / { root web; 指定网站根路径 index index.html index.htm; }} [root@proxy ~]# mkdir /usr/local/nginx/web [root@proxy ~]# echo "加油!" > /usr/local/nginx/web/index.html [root@client ~]# vim /etc/hosts 192.168.4.5 www.A.com www.B.com [root@client ~]# firefox http://www.A.com [root@client ~]# firefox http://www.B.com[root@proxy ~]# cd /lnmp_soft/php_scripts加密模块对称加密 非对称加密 信息校验111--111 123--ufgdg AES、DES RSA、DSA MD5、sha256除了MD5其它加密方法都是安全的root@client ~]# md5sum anaconda-ks.cfg 81a24d454319c2a5b8b806828e370367 anaconda-ks.cfg 信息校验
[root@proxy ~]# cd /usr/local/nginx/conf[root@proxy conf]# openssl genrsa > cert.key 生成私钥[root@proxy conf]# openssl req -new -x509 -key cert.key > cert.pem 生成证书 CN[root@proxy conf]# vim /usr/local/nginx/conf/nginx.conf........................................................server { listen 443 ssl; server_name www.C.com; ssl_certificate cert.pem; 这里是证书文件 ssl_certificate_key cert.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; } }}[root@proxy ~]# nginx -s reload[root@client ~]# vim /etc/hosts192.168.4.5 www.A.com www.B.com www.C.com[root@client ~]# firefox https://www.C.com 信任证书后可以访问
安装的软件
nginx,mariadb,mariadb-server,mariadb-devel,php,php-fpm,php-mysql[root@proxy ~]# yum -y install gcc openssl-devel pcre-devel[root@proxy ~]# useradd -s /sbin/nologin nginx[root@proxy ~]# tar -xvf nginx-1.12.2.tar.gz[root@proxy ~]# cd nginx-1.12.2[root@proxy nginx-1.12.2]# ./configure \> --user=nginx --group=nginx \> --with-http_ssl_module[root@proxy ~]# make && make install[root@proxy ~]# yum -y install mariadb mariadb-server mariadb-devel[root@proxy ~]# yum -y install php php-mysql[root@proxy ~]# cd lnmp_soft/[root@proxy lnmp_soft]# yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm[root@proxy ~]# vim /usr/local/nginx/html/lsc.php [root@proxy ~]# php /usr/local/nginx/html/lsc.php[root@proxy ~]# systemctl stop httpd 如果该服务存在则关闭该服务[root@proxy ~]# /usr/local/nginx/sbin/nginx 启动Nginx服务[root@proxy ~]# netstat -utnlp | grep :80[root@proxy ~]# systemctl start mariadb 启动服务器[root@proxy ~]# systemctl status mariadb 查看服务状态[root@proxy ~]# systemctl enable mariadb 设置开机启动[root@proxy ~]# systemctl start php-fpm 启动服务[root@proxy ~]# systemctl status php-fpm 查看服务状态[root@proxy ~]# systemctl enable php-fpm 设置开机启动[root@proxy ~]# firewall-cmd --set-default-zone=trusted[root@proxy ~]# setenforce 0[root@proxy ~]# ps axu | grep php####################################################
LNMP 测试代码,访问 多进程的程序 程序 (硬盘) 进程 (内存) 线程 修改nginx,实现: 如果是静态,则nginx直接返回给用户 如果是php,则卷发给9000端口,php执行,返回
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conflocation匹配用户的地址栏(域名后面开始)http{ server { listen 80; server_name www.D.com;location / { allow all; } 允许 所有location /abc { deny 1.1.1.1; allow all; } 拒绝 1.1.1.1 允许 所有location ~ \.php$ { deny all; } 允许 所有 } }[root@client ~]# vim /etc/hosts192.168.4.5 www.A.com www.B.com www.C.com www.D.com[root@client ~]# firefox http://www.D.com###################################################[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { 65行 root html; fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf; }[root@client ~]# firefox http://192.168.4.5/lsc.php####################################################
1.安装LNMP,启动服务 2.修改nginx配置 (nginx------->PHP) 动静分离 3.通过编写PHP代码,连接数据库 (读写操作) mysql.php[命令] http://192.168.4.5/mydql.php Nginx--------->PHP----------->MySQL LNMP常见问题 Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log PHP默认错误日志文件为/var/log/php-fpm/www-error.log 如果动态网站访问失败,可用参考错误日志,查找错误信息
#####################################################[root@proxy ~]# cd lnmp_soft/php_scripts/[root@proxy php_scripts]# vim mysql.php[root@proxy php_scripts]# cp mysql.php /usr/local/nginx/html/[root@client ~]# firefox http://192.168.4.5/mysql.php什么是地址重写?(地址栏被重写,改写了) www.360buy.com------------>www.jd.com[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confserver { listen 80; server_name www.A.com; rewrite /a.html /b.html;#auth_basic "I L Y";#auth_basic_user_file "/usr/local/nginx/pass"; location / { root html; index index.html index.htm; }[root@proxy ~]# echo "BBb" > /usr/local/nginx/html/b.html[root@proxy ~]# nginx -s reload[root@client ~]# firefox http://192.168.4.5/a.html[root@room9pc01 ~]# nslookup www.baidu.com访问a.html重定向到b.html(跳转地址栏)http://192.168.4.5a.html ---->http://192.168.4.5/b.htmlhttp://www.a.com/a.html --->http://www.a.com/b.html[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confserver { listen 80; server_name www.A.com; rewrite ^/ http://www.tmooc.cn; 38行[root@proxy ~]# nginx -s reload####################################################[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confserver { listen 80; server_name www.A.com; #rewrite ^/ http://www.tmooc.cn; rewrite /(.*) http://www.tmooc.cn/$1;39行[root@proxy ~]# nginx -s reload[root@room9pc01 ~]# tailf /var/log/httpd/access_log
用360浏览器访问真机IP出来测试页面 电脑:访问 (宽) curl 手机:访问 (寨) firefox
vim /local/nginx/html/lsc.html(宽) vim /local/nginx/html/手机/lsc.html(寨) if ($http_user_agent ~* "firefox") { rewrite /lsc.html /手机/lsc/html; }电脑:firefox http://www.baidu.lsc.html手机:firefox http://www.baidu.lsc.html#####################################################[root@proxy ~]# vim /usr/local/nginx/lsc.html lam[root@proxy ~]# mkdir /usr/local/nginx/html/firefox[root@proxy ~]# vim /usr/local/nginx/html/firefox/lsc.html lsc[root@client ~]# curl http://192.168.4.5/lsc.html302 Found 302 Found
nginx/1.12.2 [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name www.A.com; #rewrite ^/ http://www.tmooc.cn; #rewrite /(.*) http://www.tmooc.cn/$1;#auth_basic "I L Y";# auth_basic_user_file "/usr/local/nginx/pass";
这里,~符号代表正则匹配,符号代表不区分大小写 if ($http_user_agent ~ “firefox”) { 识别客户端firefox浏览器
rewrite ^/(.*)$ /firefox/$1; 42行 }[root@proxy ~]# nginx -s reload[root@client ~]# curl http://192.168.4.5/lsc.htmllam[root@client ~]# firefox http://192.168.4.5/lsc.htmllsc地址重写格式【总结】rewrite 旧地址 新地址 [选项];last 不再读其他rewritebreak 不再读其他语句,结束请求redirect 临时重定向permament 永久重定向方法1[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf rewrite /a.html /b.html last; rewrite /b.html /c.html;[root@proxy ~]# echo "aaa" > /usr/local/nginx/html/a.htmlupstream webserver { server 192.168.2.100:80 max_fails=1 fail_timeout=20; server 192.168.2.200:80; }[root@proxy ~]# echo "bbb" > /usr/local/nginx/html/b.html[root@proxy ~]# echo "ccc" > /usr/local/nginx/html/c.html[root@proxy ~]# nginx -s reload[root@client ~]# firefox http://192.168.4.5/a.html bbb[root@client ~]# firefox http://192.168.4.5/b.html ccc方法2[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf location /a.html { rewrite /a.html /b.html break; } location /b.html { rewrite /b.html /c.html; root html; index index.html index.htm; }[root@proxy ~]# nginx -s reload[root@client ~]# firefox http://192.168.4.5/a.html bbb[root@client ~]# firefox http://192.168.4.5/b.html ccc#####################################################[root@web1 ~]# yum -y install httpd[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html[root@web1 ~]# systemctl start httpd[root@web2 ~]# yum -y install httpd[root@web2 ~]# echo "192.168.2.200" > /var/www/html/index.html[root@web2 ~]# systemctl start httpd[root@proxy ~]# curl http://192.168.2.100192.168.2.100[root@proxy ~]# curl http://192.168.2.200192.168.2.200[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf# location /a.html {# rewrite /a.html /b.html break;# }# location /b.html {# rewrite /b.html /c.html;.................................................http {.................................................upstream webserver {通过ip_hash设置调度规则为:相同客户端访问相同服务器 server 192.168.2.100:80; server 192.168.2.200:80; }.................................................server {# rewrite ^/(.*) http://www.tmooc.cn/$1;#auth_basic "I L Y";# auth_basic_user_file "/usr/local/nginx/pass"; #if ($http_user_agent ~* "firefox") { #rewrite ^(.*)$ /firefox/$1; #}# location /a.html {# rewrite /a.html /b.html break;# }# location /b.html {# rewrite /b.html /c.html; location / { proxy_pass http://webserver; root html; index index.html index.htm; }[root@proxy ~]# nginx -s reload[root@client ~]# curl http://192.168.4.5192.168.2.100[root@client ~]# curl http://192.168.4.5192.168.2.200
weight设置服务器权重值,默认值为1 max_fails设置最大失败次数 fail_timeout设置失败超时时间,单位为秒 down标记服务器已关机,不参与集群调度
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confupstream webserver { server 192.168.2.100:80 weight=2; 全中是2 server 192.168.2.200:80; 默认是1 }[root@proxy ~]# nginx -s reload[root@client ~]# curl http://192.168.4.5192.168.2.100[root@client ~]# curl http://192.168.4.5192.168.2.100[root@client ~]# curl http://192.168.4.5192.168.2.200[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confupstream webserver { server 192.168.2.100:80 max_fails=4 最大失败次数4次fail_timeout=20;如果失败了超时时间20秒 server 192.168.2.200:80; }[root@proxy ~]# nginx -s reload[root@client ~]# curl http://192.168.4.5192.168.2.100[root@client ~]# curl http://192.168.4.5192.168.2.200[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf.. ..http {.. ..upstream webserver { server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30; server 192.168.2.101 down; }#weight设置服务器权重值,默认值为1#max_fails设置最大失败次数#fail_timeout设置失败超时时间,单位为秒#down标记服务器已关机,不参与集群调度.. ..server { listen 80; server_name localhost; location / { proxy_pass http://webserver; }}[root@proxy ~]# nginx -s reload[root@client ~]# curl http://192.168.4.5192.168.2.100[root@client ~]# curl http://192.168.4.5192.168.2.200[root@client ~]# curl http://192.168.4.5192.168.2.200相同客户端访问相同Web服务器:nginx web1(登陆,记住你的登陆状态proxy web2(登陆)[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf ip_hash; server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10; }[root@proxy ~]# nginx -s reload[root@client ~]# curl http://192.168.4.5192.168.2.200一直是192.168.2.200[root@web2 ~]# systemctl stop httpd[root@client ~]# curl http://192.168.4.5192.168.2.100一直是192.168.2.100IP----------------->IP (23.35.11.87)hash%2 =0IP----------------->IP (23.35.11.87)hash%2 =0IP----------------->IP (1.1.1.1)HASH%2 =1IP----------------->IP (1.1.1.1)HASH%2 =1[root@client ~]# echo 192.168.4.5 | md5sum
http { upstrream 名称 {} proxy_pass http://名称;}Nginx的TCP/UDP调度器卸载[root@proxy ~]# killall nginx 把nginx全部杀死[root@proxy ~]# rm -rf /usr/local/nginx/ 把配置文件删除编译安装必须要使用--with-stream参数开启4层代理模块[root@proxy ~]# tar -xf nginx-1.12.2.tar.gz[root@proxy ~]# cd nginx-1.12-2[root@proxy nginx-1.12.2]# ./configure --with-http_ssl_module --with-strean[root@proxy nginx-1.12.2]# make && make install配置Nginx服务器,添加服务器池,实现TCP/UDP反向代理功能[root@proxy nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.confstream { upstream lsc { hash $remote_addr consistent; 不变 server 192.168.2.100:22; #后端SSH服务器的IP和端口 server 192.168.2.200:22;} server { listen 123; #Nginx监听的端口 proxy_pass lsc;}}http {[root@proxy nginx-1.12.2]# nginx[root@client ~]# ssh 192.168.4.5[root@client ~]# ssh -p 123 192.168.4.5[root@web1 ~]# [root@client ~]# ssh -p 123 192.168.4.5[root@web2 ~]#
nginx功能: 虚拟主机,用户认证,加密,LNMP,地址重写,集群调度(代理) 优化nginx 如何自定义返回给客户端的404错误页面 如何查看服务器状态信息 如果客户端访问服务器提示“Too many open files”如何解决 如何解决客户端访问头部信息过长的问题 如何让客户端浏览器缓存数据 日志切割 开启gzip压缩功能,提高数据传输效率 开启文件缓存功能
[root@proxy nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conferror_page 404 /40x.html; #自定义错误页面[root@proxy ~]# vim /usr/local/nginx/html/404.html #生成错误页面Ym Lost my page.[root@client ~]# firefox http://192.168.4.5/xxxxYm Lost my page
如何查看服务器状态信息(非常重要的功能)
[root@proxy ~]# killall nginx[root@proxy ~]# rm -rf /usr/local/nginx/[root@proxy ~]# yum -y reinstall gcc pcre-devel openssl-devel 安装常见依赖包[root@proxy ~]# cd lnmp_soft/[root@proxy lnmp_soft]# tar -zxvf nginx-1.12.2.tar.gz[root@proxy nginx-1.12.2]# ./configure > --with-http_ssl_module 开启SSL加密功能> --with-stream 开启TCP/UDP代理模块> --with-http_stub_status_module 开启status状态页面[root@proxy nginx-1.12.2]# make && make install 编译并安装
代理服务器 web1 client------------->代理服务器 web2 7层代理:只能做web代理
http{ upstream 名称 { ip_hash; server ip1 weight=2 max_fails=3 fail_timeout=20; server ip2; } server { listen 80; server_name xxx; proxy_pass http://名称1; } }4层代理:tcp,udp,所有服务的代理dns,mysql,smtp ./configure --with-stream stream { upstream {server ip1; server ip2} server {listen 123; proxy_pass 名称2}} http{} nginx代理,httpd代理,tomcat代理 nginx代理(web,代理,正则,4层代理新功能) haproxy代理(效露更快,功能更强,正则支持渣) office,wps
1.自定义报错,默认报错404,error_page 404 /文件名; 2.査看nginx状态模块–with-http_stub_status_module
如何查看服务器状态信息(非常重要的功能)
[root@proxy ~]# killall nginx[root@proxy ~]# rm -rf /usr/local/nginx/[root@proxy ~]# yum -y reinstall gcc pcre-devel openssl-devel 安装常见依赖包[root@proxy ~]# cd lnmp_soft/[root@proxy lnmp_soft]# tar -zxvf nginx-1.12.2.tar.gz[root@proxy nginx-1.12.2]# ./configure > --with-http_ssl_module 开启SSL加密功能> --with-stream 开启TCP/UDP代理模块> --with-http_stub_status_module 开启status状态页面[root@proxy nginx-1.12.2]# make && make install 编译并安装[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf location /ABC { stub_status on; #allow IP地址; 允许 #deny IP地址; 拒绝 }[root@proxy ~]# nginx[root@client ~]# curl http://192.168.4.5/ABCActive connections: 1Active connections:当前活动的连接数量server accepts handled requestsAccepts:已经接受客户端的连接总数量 Handled:已经处理客户端的连接总数量 37 37 319 握手 请求Reading: 0 Writing: 1 Waiting: 0Reading:当前服务器正在读取客户端请求头的数量Writing:当前服务器正在写响应信息的数量Waiting:当前多少客户端在等待服务器的响应优化Nginx并发量 静态网页 (上万) 大小10K 动态网页 (几千)[root@proxy ~]# ab -c 200 -n 200 http://192.168.4.5/ ab(浏览器) -c(多少人) -n(多少次) 网站[root@client ~]# firefox http://192.168.4.5/ABC[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf.. ..worker_processes 2; 与CPU核心数量一致events {worker_connections 65535; 每个worker最大并发连接数use epoll;}[root@proxy ~]# which ab/usr/bin/ab[root@proxy ~]# rpm -qf /usr/bin/ab优化Linux内核参数(最大文件数量)Linux内核对计算机可以打开多少文件是有限制的1024[root@proxy ~]# ulimit -a 查看所有属性值[root@proxy ~]# ulimit -Hn 100000 设置硬限制(临时规则)[root@proxy ~]# ulimit -Sn 100000 设置软限制(临时规则)[root@proxy ~]# vim /etc/security/limits.conf............................................\* soft nofile 100000用户或组 软限制 需要限制的项目 限制的值* hard nofile 100000用户或组 软限制 需要限制的项目 限制的 硬限制或软限制[root@proxy ~]# ab -c 2000 -n 2000 http://192.168.4.5/优化Nginx数据包头缓存[root@proxy ~]# cat lnmp_soft/buffer.sh #!/bin/bashURL=http://192.168.4.5/index.html?for i in {1..5000}do URL=${URL}v$i=$idonecurl $URL 经过5000次循环后,生成一个长的URL地址栏[root@proxy ~]# ./buffer.sh.. ..提示头部信息过大[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confhttp { include mime.types; default_type application/octet-stream;client_header_buffer_size 1k; 默认请求包头信息的缓存large_client_header_buffers 4 1m; 大请求包头部信息的缓存个数与容量[root@proxy ~]# nginx -s reload[root@proxy lnmp_soft]# bash buffer.sh以Firefox浏览器为例,在Firefox地址栏内输入about:cache[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confserver { listen 80; server_name localhost; location ~* \.(jpg|png)$ { expires 30d;有效期30天 }[root@proxy ~]# nginx -s reload[root@proxy ~]# cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html/[root@proxy ~]# nginx -s reload[root@client ~]# firefox http://192.168.4.5/day.jpg日志切割[root@proxy ~]# cd /usr/local/nginx/logs/[root@proxy logs]# ab -c 100 -n 100000 http://192.168.4.5/[root@proxy logs]# mv access.log access-19-03-14.log[root@proxy logs]# cat nginx.pid1996[root@proxy logs]# kill -USR1 1996自动生成access.log[root@proxy ~]# kill -l[root@proxy ~]# ps aux | grep a.sh 査进程号19)SIGSTOP睡一会18)SIGCONT醒来[root@proxy ~]# kill -19 进程号[root@proxy ~]# kill -18 进程号 414 Request-URI Too Large
日志文件越来越大怎么办?单个文件10G? 如何切割?(非常常见的面试题) 每周5的03点03分自动执行脚本完成日志切割工作
[root@proxy ~]# vim /usr/local/nginx/logbak.sh#!/bin/bashdate=`date +%Y%m%d`logpath=/usr/local/nginx/logsmv $logpath/access.log $logpath/access-$date.logmv $logpath/error.log $logpath/error-$date.logkill -USR1 $(cat $logpath/nginx.pid)[root@proxy ~]# crontab -e03 03 * * 5 /usr/local/nginx/logbak.sh对页面进行压缩处理[root@proxy logs]# cd /usr/local/nginx/html/[root@proxy html]# ll -h day.jpg[root@proxy html]# gzip day.jpg[root@proxy html]# ll -h day.jpg.gz[root@proxy html]# cd /usr/local/nginx/conf/[root@proxy conf]# vim mime.typesaudio/mpeg mp3[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confhttp {......................................... gzip on; 开启压缩 gzip_min_length 1000; 小文件不压缩 gzip_comp_level 4; 压缩比率 gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 对特定文件压缩,类型参考mime.types.......................................... }[root@proxy ~]# nginx -s reload服务器内存缓存http { open_file_cache max=2000 inactive=20s; open_file_cache_valid 60s; open_file_cache_min_uses 5; open_file_cache_errors off;
设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄 #文件句柄的有效时间是60秒,60秒后过期 #只有访问次数超过5次会被缓存
}
######################################################[web1]编译安装[root@proxy ~]# scp /lnmp_soft.tar.gz root@192.168.2.100:/[root@web1 ~]# tar -xf /lnmp_soft.tar.gz[root@web1 ~]# cd lnmp_soft/[root@web1 lnmp_soft]# yum -y install gcc pcre-devel openssl-devel[root@web1 lnmp_soft]# useradd -s /sbin/nologin nginx[root@web1 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz[root@web1 lnmp_soft]# cd nginx-1.12.2/[root@web1 nginx-1.12.2]# ./configure --user=nginx --group=nginx --with-http_ssl_module[root@web1 nginx-1.12.2]# make && make install部署LNMP[root@web1 lnmp_soft]# yum -y install mariadb mariadb-server mariadb-devel[root@web1 lnmp_soft]# yum -y install php php-mysql.x86_64[root@web1 lnmp_soft]# yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm [root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { 70行 root html; fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf; }[root@web1 ~]# /usr/local/nginx/sbin/nginx 一个端口只能被一个程序使用 nginx用:80 httpd用:80[root@web1 ~]# systemctl restart mariadb[root@web1 ~]# systemctl enable mariadb[root@web1 ~]# systemctl restart php-fpm[root@web1 ~]# systemctl enable php-fpm
Session:存储在服务器端,保存用户名,登陆状态等信息 Cookies:由服务器下发给客户端,保存在客户端的一个文件里 保存的内容主要包括:SessionID
登陆client-------------->server SID1.用户名,密码----------------->验证 (登陆成功): 生成文件(tom,logined)[root@web1 ~]# echo a | md5sum 文件名60b725f10c9c85c70d97880dfe8191b3 -2.返回页面<-------------------数据包的头部信息(cookies:Sid)3.浏览器保存cookies=Sidclient F5-------------->server SID4.再次访问浏览器(cookies)------>Sid[root@web1 ~]# cd lnmp_soft/php_scripts/[root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz[root@web1 php_scripts]# cd php-memcached-demo/[root@web1 php-memcached-demo]# cp -r * /usr/local/nginx/html/用浏览器访问192.168.2.100/index.php你登陆的用户名,密码都是对了[root@web1 php-memcached-demo]# cd /var/lib/php/session/#####################################################构建memcached服务[root@proxy ~]# yum -y install memcached.x86_64[root@proxy ~]# rpm -qa memcached[root@proxy ~]# systemctl status memcached[root@proxy ~]# systemctl restart memcached[root@proxy ~]# systemctl enable memcached[root@proxy ~]# vim /usr/lib/systemd/system/memcached.service[root@proxy ~]# vim /etc/sysconfig/memcached[root@proxy ~]# cd /usr/lib/systemd/system 启服务都在这个路径下[root@proxy system]# ll[root@proxy ~]# ss -antlp | grep memcached[root@proxy ~]# netstat -antlp | grep memcached 2个都能査看端口-a显示所有端口的信息-n以数字格式显示端口号-t显示TCP连接的端口-u显示UDP连接的端口-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口-p显示监听端口的服务名称是什么(也就是程序名称)[root@proxy ~]# setenforce 0[root@proxy ~]# firewall-cmd --set-default-zone=trusted[root@proxy ~]# yum -y install telnet 远程连接[root@proxy ~]# telnet 192.168.4.5 11211...........................................................##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。set name 0 180 3 定义变量,变量名称为nameplj 输入变量的值,值为plj STOREDget name 获取变量的值VALUE name 0 3 输出结果pljEND##提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。add myname 0 180 10 新建,myname不存在则添加,存在则报错set myname 0 180 10 添加或替换变量replace myname 0 180 10 替换,如果myname不存在则报错get myname 读取变量append myname 0 180 10 向变量中追加数据delete myname 删除变量stats 查看状态flush_all 清空所有quit 退出登录
4.5 + 2.5 web1 (2.100) LNMP无法连接mysql proxy+memcached proxy web2 (2.200)扩展包 proxy:做nginx代理+memched启动服务 web1和web2部署LNMP环境
[root@web1 ~]# scp /lnmp_soft.tar.gz root@192.168.2.200:/[root@web2 ~]# tar -xf /lnmp_soft.tar.gz[root@web2 ~]# cd lnmp_soft/[root@web2 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz[root@web2 lnmp_soft]# cd nginx-1.12.2/[root@web2 nginx-1.12.2]# yum -y install gcc pcre-devel openssl-devel[root@web2 nginx-1.12.2]# useradd -s /sbin/nologin nginx[root@web2 nginx-1.12.2]# ./configure --user=nginx --group=nginx --with-http_ssl_module[root@web2 nginx-1.12.2]# make && make install[root@web2 lnmp_soft]# yum -y install mariadb mariadb-server mariadb-devel php php-mysql.x86_64 php-fpm-5.4.16-42.el7.x86_64.rpm [root@web2 lnmp_soft]# vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { 68行 root html; fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi.conf; }[root@web2 lnmp_soft]# /usr/local/nginx/sbin/nginx[root@web2 lnmp_soft]# systemctl restart mariadb[root@web2 lnmp_soft]# systemctl enable mariadb[root@proxy lnmp_soft]# systemctl restart mariadb[root@proxy lnmp_soft]# systemctl enable mariadb[root@proxy ~]# ss -nutlp | grep :80 査看端口谁在用[root@proxy ~]# vim /usr/local/nginx/conf/nginx.confupstream webs { 32行 server 192.168.2.100:80; server 192.168.2.200:80; }........................................................... location / { proxy_pass http://123; root html; index index.html index.htm; }[root@web2 ~]# /usr/local/nginx/sbin/nginx -sreload[root@web1 ~]# vim /usr/local/nginx/html/index.htmlWelcome to nginx!2.100
14行[root@web1 ~]# grep h1 /usr/local/nginx/html/index.html[root@web2 ~]# cd lnmp_soft/php_scripts/[root@web2 php_scripts]# tar -xf php-memcached-demo.tar.gz[root@web2 php_scripts]# cp -r php-memcached-demo/* /usr/local/nginx/html/
默认session是存本地,所有集群有问题 memcached数据库:基于内存存数据,快,简单(没有表和数据库) KV形式存诸数据 key=value memcached重启后所有数据全部丢失 创建数据库,数据表(设计标题头) 表1—表2
[root@web1 ~]# cd /usr/local/nginx/html/ [root@web1 html]# vim index.php 10行 [root@web1 html]# vim home.php 15行 [root@web1 html]# cd /var/lib/php/session/ [root@web1 session]# ls sess_l3lr6p60lp85cj1llm8teabh35 [root@web2 ~]# cd /var/lib/php/session/ sess_l3lr6p60lp85cj1llm8teabh35 [root@web1 ~]# yum list | grep memcach [root@web1 ~]# yum -y install php-pecl-memcache.x86_64 [root@web2 ~]# yum -y install php-pecl-memcache.x86_64 [root@web1 ~]# vim /etc/php-fpm.d/www.conf [root@web2 ~]# vim /etc/php-fpm.d/www.conf php_value[session.save_handler] = memcache php_value[session.save_path] = “tcp://192.168.2.5:11211” [root@web1和2 ~]# systemctl restart php-fpm [root@web1和2 ~]# systemctl enable php-fpm nginx+php,Python Tomcat+Java[root@web1 ~]# rpm -qa | grep jdk[root@web1 ~]# yum -y install java-1.8.0-openjd 安装JDK[root@web1 ~]# yum -y install java-1.8.0-openjdk-headless 安装JDK[root@web1 ~]# java -version 查看JAVA版本[root@web1 ~]# cd lnmp_soft/[root@web1 lnmp_soft]# tar -xf apache-tomcat-8.0.30.tar.gz[root@web1 lnmp_soft]# mv apache-tomcat-8.0.30 /usr/local/tomcat[root@web1 lnmp_soft]# cd /usr/local/tomcat[root@web1 ~]# ls /usr/local/tomcatbin/ #主程序目录lib/ #库文件目录logs/ #日志目录 temp/ #临时目录work/ #自动编译目录jsp代码转换servletconf/ #配置文件目录webapps/ #页面目录[root@web1 ~]# ls /usr/local/tomcat/bin/startup.sh #启动服务[root@web1 tomcat]# ss -ntulp | grep tomcat[root@web1 tomcat]# ss -ntulp | grep java[root@web1 tomcat]# firefox http://192.168.2.100:8080[root@web1 ~]# ls /usr/local/tomcat/bin/shutdown.sh #关闭服务[root@web1 ~]# vim /usr/local/tomcat/webapps/ROOT/lsc.jspNow time is: <%=new java.util.Date()%> 显示服务器当前时间 [root@web1 ROOT]# firefox http://192.168.2.100:8080/lsc.jsp使用Tomcat部署虚拟主机[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml..................................................................................................................[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh[root@web1 ~]# /usr/local/tomcat/bin/startup.sh[root@web1 ~]# ss -nutlp | grep java[root@web1 ~]# mkdir -p /usr/local/tomcat/{A,B}/ROOT[root@web1 ~]# echo "AAA" > /usr/local/tomcat/A/ROOT/index.html[root@web1 ~]# echo "BBB" > /usr/local/tomcat/B/ROOT/index.html[root@proxy ~]# vim /etc/hosts192.168.2.100 www.A.com www.B.com[root@proxy ~]# firefox http://www.A.com:8080[root@proxy ~]# firefox http://www.B.com:8080[root@proxy ~]# firefox http://www.A.com:8080 http://www.B.com:8080 http://192.168.2.100:8080 &[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml........................................................... ...........................................................[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh[root@web1 ~]# /usr/local/tomcat/bin/startup.sh[root@proxy ~]# firefox http://www.B.com:8080[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml.......................................................... ..........................................................[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh[root@web1 ~]# /usr/local/tomcat/bin/startup.sh[root@proxy ~]# firefox http://www.A.com:8080/tset配置Tomcat支持SSL加密网站[root@web1 ~]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore 提示输入密码为:123456#-genkeypair 生成密钥对#-alias tomcat 密钥别名#-keyalg RSA 定义密钥算法为RSA算法#-keystore 定义密钥文件存储在:/usr/local/tomcat/keystore[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml 去调[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh[root@web1 ~]# /usr/local/tomcat/bin/startup.sh[root@proxy ~]# firefox https://www.A.com:8443 https://www.B.com:8443 https://192.168.2.100:8443 &排错[root@web1 ~]# tailf /usr/local/tomcat/logs/[root@web1 ~]# tailf /usr/local/tomcat/logs/catalina.2019-03-27.log如果出错[root@web1 ~]# cd /usr/local/tomcat/logscatalina.年.月.日.logcatalina.out配置Tomcat日志[root@web1 logs]# vim /usr/local/tomcat/conf/server.xml [root@web1 logs]# /usr/local/tomcat/bin/shutdown.sh[root@web1 logs]# /usr/local/tomcat/bin/startup.sh[root@web1 logs]# lsA.com.2019-03-27.log ....................
[root@room9pc01 ~]# yum -y install git[root@room9pc01 ~]# git clone https://github.com/redhatedu/1812[root@room9pc01 ~]# ls -d 1812/[root@room9pc01 ~]# cd 1812/[root@room9pc01 1812]# cat test.sh#!/bin/bashfor i in {1..10}do echo hello $idone[root@room9pc01 1812]# vim test.sh#!/bin/bash#this is a loop scriptfor i in {1..10}do echo hello $idone[root@room9pc01 1812]# echo "aaa" > a.txt[root@room9pc01 1812]# git add .[root@room9pc01 1812]# git commit -m 'xx' 命令行操作(需要联网的主机,如真实机)[root@pc001 ~]# yum -y install git[root@pc001 ~]# git clone https://github.com/账户名称/仓库名称#clone指令用于将服务器仓库中的资料打包下载到本地[root@pc001 ~]# cd 仓库名称[root@pc001 ~]# 任意修改文件,或新建文件[root@pc001 ~]# git add .#add添加新文件[root@pc001 ~]# git commit -m "test"[root@pc001 ~]# git push#commit和push实现提交代码的功能[root@pc001 ~]# git pull#pull更新,类似于svn updateRPM (怎么用源码包做一个rpm包)rpm-build--读配置文件在我自己的电脑上先把源码编译安装,安装目录/usr/local/nginx把/usr/local/nginx目录打个包,rpm别人使用rpm,解压[root@web1 ~]# yum -y install gcc 必须安装gcc[root@web1 ~]# yum -y install rpm-build[root@web1 ~]# rpmbuild -ba xx.sepc 会报错,没有文件或目录[root@web1 ~]# ls /root/rpmbuild 自动生成的目录结构[root@web1 ~]# cp lnmp_soft/nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/[root@web1 ~]# cd rpmbuild/SPECS/[root@web1 ~]# cp lnmp_soft/nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/[root@web1 SPECS]# vim nginx.specName:nginxVersion:1.12.2Release: 1%{?dist}Summary:this is a web server#Group:License:GPLURL:www.abc.comSource0:nginx-1.12.2.tar.gz#BuildRequires: #Requires: %descriptionthis is a web server to.%postuseradd nginxtouch /tmp/nginx.txt%prep%setup -q%build./configure --with-http_ssl_modulemake %{?_smp_mflags}%installmake install DESTDIR=%{buildroot}%files%doc/usr/local/nginx/*%changelog[root@web1 SPECS]# rpmbuild -ba nginx.spec[root@web1 SPECS]# cd /root/rpmbuild/RPMS/x86_64[root@web1 x86_64]# ls[root@web1 x86_64]# killall nginx[root@web1 x86_64]# rm -rf /usr/local/nginx/[root@web1 x86_64]# yum -y install nginx-1.12.2-111.x86_64.rpm[root@web1 x86_64]# ls /usr/local/nginx[root@web1 x86_64]# id nginx[root@web1 x86_64]# ls /tmp/nginx.txt[root@web1 x86_64]# rpm -ql nginx[root@web1 x86_64]# rpm -qi nginx
[root@client ~]# nmcli connection add type ethernet ifname eth3 con-name eth3[root@client ~]# nmcli connection modify eth3 ipv4.method manual ipv4.addresses 201.1.2.10/24 connection.autoconnect yes[root@client ~]# nmcli connection up eth3[root@proxy ~]# nmcli connection add type ethernet ifname eth3 con-name eth3[root@proxy ~]# nmcli connection modify eth3 ipv4.method manual ipv4.addresses 201.1.2.5/24 connection.autoconnect yes[root@proxy ~]# nmcli connection up eth3启用GRE模块(client和proxy都需要操作)[root@proxy ~]# lsmod 显示模块列表[root@proxy ~]# lsmod | wc -l[root@proxy ~]# lsmod | grep ip_gre 确定是否加载了gre模块[root@proxy ~]# modprobe ip_gre 加载模块ip_gre[root@proxy ~]# lsmod | grep gre[root@proxy ~]# rmmod ip_gre 删除模块[root@proxy ~]# modinfo ip_gre ` 查看模块信息[root@proxy ~]# cd /lib/modules/3.10.0-693.el7.x86_64/kernel[root@proxy kernel]# find ./ | wc -l2961[root@proxy kernel]# lsdrivers驱动 crypto加密 virt虚拟化 net网络mm内存 [root@proxy kernel]# cd sound/[root@proxy sound]# modprobe ac97_busClient主机创建VPN隧道[root@client ~]# ip help[root@client ~]# ip tunnel helpadd 新建 del 删除 show 査看 名字[root@client ~]# ip tunnel del tun0[root@client ~]# ip tunnel add tun0 mode gre remote 201.1.2.5 local 201.1.2.10ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助mode设置隧道使用gre模式local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址[root@client ~]# ip tunnel | grep tun0[root@client ~]# ip link show | grep tun0[root@client ~]# ip tunnel show | grep tun0 査看隧道[root@client ~]# ip link set tun0 up 激活设置UP[root@client ~]# ip addr add 10.10.10.10/24 peer 10.10.10.5/24 dev tun0add 自己 peer 对方[root@client ~]# ip addr show tun0[root@client ~]# ip a s eth3 査看隧道IP1.激活gre 2.创建隧道 3.配隧道IPProxy主机创建VPN隧道[root@proxy ~]# modprobe ip_gre[root@proxy ~]# ip tunnel add tun0 mode gre remote 201.1.2.10 local 201.1.2.5[root@proxy ~]# ip addr add 10.10.10.5/24 peer 10.10.10.10/24 dev tun0[root@proxy ~]# ip link set tun0 up
1.激活gre 2.创建隧道 3.配隧道IP 缺点:没有加密不适合权一些重要的东西 :基于内核的你排错不是那么好排 优点:命令好敲,简单 :路由器上都支持 部署VPN服务器 安装软件包(软件包参考lnmp_soft)
[root@proxy ~]# cd lnmp_soft/vpn[root@proxy vpn]# yum -y install pptpd-1.4.0-2.el7.x86_64.rpm[root@proxy vpn]# rpm -qc pptpd 査配置文件/etc/ppp/options.pptpd/etc/pptpd.conf/etc/sysconfig/pptpd[root@proxy vpn]# vim /etc/pptpd.conf..........................................................localip 201.1.2.5 服务器本地IPremoteip 192.168.3.100-150 分配给客户端的IP池[root@proxy vpn]# vim /etc/ppp/options.pptpd /requirerequire-mppe-128 使用MPPE加密数据ms-dns 8.8.8.8 DNS服务器[root@proxy vpn]# vim /etc/ppp/chap-secrets 修改账户配置文件jacob * 123 *用户名 服务器标记 密码 客户端[root@proxy vpn]# echo "1" > /proc/sys/net/ipv4/ip_forward 开启路由转发[root@proxy ~]# systemctl start pptpd[root@proxy ~]# systemctl enable pptpd[root@proxy ~]# firewall-cmd --set-default-zone=trusted翻墙设置(非必需操作)[root@proxy vpn]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 201.1.2.5[root@proxy vpn]# ip addr show[root@proxy vpn]# tcpdump -A icmp -i any 抓包部署IPSec服务[root@client ~]# yum -y install libreswan[root@client ~]# yum list | grep libreswan[root@client ~]# tail -1 /etc/ipsec.conf[root@client ~]# cp lnmp_soft/vpn/myipsec.conf /etc/ipsec.d/[root@client ~]# cd /etc/ipsec.d/新建IPSec密钥验证配置文件[root@client ipsec.d]# vim myipsec.confleft=201.1.2.10 重要,服务器本机的外网IPright=%any 允许任何客户端连接创建IPSec预定义共享密钥当是conf主配置文件当是secrets密钥[root@client ipsec.d]# abc.secrets201.1.2.10 %any: PSK "randpass" vpn:ip 所有人 遇共享密钥 密码[root@client ipsec.d]# systemctl start ipsec[root@client ipsec.d]# netstat -ntulp | grep pluto部署XL2TP服务安装软件包(软件包参考lnmp_soft)[root@client ~]# cd lnmp_soft/vpn/[root@client vpn]# yum -y install xl2tpd-1.3.8-2.el7.x86_64.rpm修改xl2tp配置文件(修改3个配置文件的内容)[root@client ~]# vim /etc/xl2tpd/xl2tpd.conf 修改主配置文件ip range = 192.168.3.128-192.168.3.254 分配给客户端的IP池local ip = 201.1.2.10 VPN服务器的IP地址[root@client ~]# vim /etc/ppp/options.xl2tpd 认证配置require-mschap-v2 添加一行,强制要求认证#crtscts 注释或删除该行#lock ` 注释或删除该行[root@client ~]# vim /etc/ppp/chap-secrets 修改密码文件jacob * 123 *[root@client ~]# systemctl start xl2tpd[root@client ~]# ss -ntulp | grep xl2tpdgre---> pptp ---> xl2tp+ipsecNTP时间同步安装软件包[root@proxy ~]# yum -y install chrony[root@proxy ~]# rpm -qc chrony 查看配置文件列表修改配置文件[root@proxy ~]# vim /etc/chrony.confserver0 192.168.4.5 iburst server用户客户端指向上层NTP服务器allow 192.168.4.0/24 允许那个IP或网络访问NTP#deny 192.168.4.1 拒绝那个IP或网络访问NTPlocal stratum 10 设置NTP服务器的层数量[root@proxy ~]# grep allow /etc/chrony.conf[root@proxy ~]# grep ^local /etc/chrony.conf[root@proxy ~]# systemctl restart chronyd[root@proxy ~]# systemctl enable chronyd[root@proxy ~]# date 时间服务器:vim /etc/chrony.conf allow 192.168.4.0/24 local stratum 10客户端:vim /etc/chrony.conf server 192.168.4.5 iburstpssh远程套件工具安装pssh后会提供如下命令:/usr/bin/pnuke /usr/bin/prsync/usr/bin/pscp.pssh /usr/bin/pslurp/usr/bin/pssh安装软件包[root@proxy ~]# cd lnmp_soft/[root@proxy lnmp_soft]# yum -y install pssh-2.3.1-5.el7.noarch.rpm[root@proxy ~]# which pssh/usr/bin/pssh修改/etc/hosts本地解析文件[root@proxy ~]# vim /etc/hosts192.168.2.100 web1192.168.2.200 web2192.168.4.10 client创建主机列表文件[root@proxy ~]# vim /root/host.txt 每行一个用户名、IP或域名root@web1root@web2root@client[root@proxy ~]# ssh web1第一次远程别人的主机会有yes或on[root@proxy ~]# ssh -o StrictHostKeyChecking=no web1[root@proxy ~]# man pssh 通过man帮助查看工具选项的作用pssh提供并发远程连接功能-A 使用密码远程其他主机(默认使用密钥)-i 将输出显示在屏幕-H 设置需要连接的主机-h 设置主机列表文件-p 设置并发数量-t 设置超时时间-o dir 设置标准输出信息保存的目录-e dir 设置错误输出信息保存的目录-x 传递参数给ssh[root@proxy ~]# pssh -i -A -H 'web1 web2 client' -x '-o StrictHostKeyChecking=no' echo qwaszx [root@proxy ~]# pssh -i -A -H 'web1 web2 client' echo qwaszx[root@proxy ~]# pssh -i -A -h host.txt echo qwaszx[root@proxy ~]# pssh -A -h host.txt echo qwaszx[root@proxy ~]# ssh-keygen[root@proxy ~]# ssh-keygen -N '' -f /root/.ssh/id_rsa 非交互生成密钥文件[root@proxy ~]# ssh-copy-id client[root@proxy ~]# ssh-copy-id web1[root@proxy ~]# ssh-copy-id web2[root@proxy ~]# pssh -h host.txt echo abc[root@proxy ~]# pssh -o /tmp/ -h host.txt echo abc[root@proxy ~]# pscp.pssh -h host.txt /etc/hosts/ /root/ 批量拷贝pscp.pssh 把你的东西泉给别人pslurp 把别人的东西泉给你[root@proxy ~]# pslurp -h host.txt /etc/passwd /pass 在当前目录下[root@proxy ~]# ls -d web1 web2 client[root@proxy ~]# pslurp -h host.txt -L /etc/ /etc/passwd /pass[root@proxy ~]# ls /etc/web1/ /etc/web2 /etc/client/[root@XXX ~]# sleep 1000[root@proxy ~]# pnuke -h host.txt sleep 批量杀死pssh 批量执行命令pscp.pssh 推送文件pslurp 拉取文件pnuke 杀死进程p (并发)
session (默认存本地计算机)
vim /etc/php-fpm.d/www.conf最后2行 = flie = /var/lib/php/session
假如我不想存本地
= memcache = "tcp://192.168.2.5:11211"systemctl restart php-fpm/usr/local/tomcat/bin/startup.sh/usr/local/tomcat/webpps/ROOT/index.jsp【猫】shell--->php--->python--->java--->c--->汇编Varnish代理软件,nginx (没有开启缓存)Varnish代理+缓存功能 (网页缓存)
用户----------------代理-------------------后端服务器 用户----------------代理
[root@web1 ~]# yum -y install httpd[root@web1 ~]# systemctl restart httpd[root@web1 ~]# firewall-cmd --set-default-zone=trusted[root@web1 ~]# setenforce 0[root@web1 ~]# netstat -anpat | grep httpd[root@proxy ~]# firefox http://192.168.2.100[root@proxy ~]# curl http://192.168.2.100192.168.2.100
部署Varnish缓存服务器(192.168.4.5)
[root@proxy ~]# yum -y install gcc readline-devel 安装软件依赖包[root@proxy ~]# yum -y install ncurses-devel 安装软件依赖包[root@proxy ~]# yum -y install pcre-devel 安装软件依赖包[root@proxy ~]# yum -y install \python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm 安装软件依赖包[root@proxy ~]# useradd -s /sbin/nologin varnish 创建账户[root@proxy ~]# cd lnmp_soft/[root@proxy lnmp_soft]# tar -xf varnish-5.2.1.tar.gz[root@proxy lnmp_soft]# cd varnish-5.2.1[root@proxy varnish-5.2.1]# ./configure[root@proxy varnish-5.2.1]# make && make install[root@proxy varnish-5.2.1]# varnish[root@proxy varnish-5.2.1]# cp etc/example.vcl /usr/local/etc/Varnish.vcl[root@proxy varnish-5.2.1]# vim /usr/local/etc/Varnish.vclbackend default { .host = "192.168.2.100"; .port = "80";}[root@proxy varnish-5.2.1]# varnishd -f /usr/local/etc/Varnish.vcl 报错[root@proxy ~]# ss -ntulp | grep :80[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop[root@proxy ~]# varnishd -f /usr/local/etc/Varnish.vcl[root@client ~]# curl http://192.168.4.5192.168.2.100[root@proxy ~]# varnishlog varnish日志[root@client ~]# curl http://192.168.4.5[root@proxy ~]# varnishncsa 访问日志[root@client ~]# curl http://192.168.4.5[root@proxy ~]# varnishadm 清空缓存数据,支持正则表达式varnish> ban req.url ~ .*varnish> quit不支持exit[root@proxy ~]#
一个项目需要20个人开发 每个人写自己的文件 多人可能修改相同的文件 test.sh 【8个功能】 1.批量创建账户 2.批量修改文件名 3.批量安装软件包 4.。。。。 5.。。。。
有一种软件叫版本控制系统【cvs,git,svn】 安装Subversion服务器[root@web1 ~]# yum -y install subversion[root@web2 ~]# yum -y install subversion创建版本库[root@web1 ~]# mkdir /var/svn[root@web1 ~]# svnadmin create /var/svn/project[root@web1 ~]# ls /var/svn/project/[root@web1 ~]# du -sh /var/svn/project/100K /var/svn/project/[root@web1 ~]# ls /usr/lib/systemd/system 这下面就是放启服务本地导入初始化数据[root@web1 ~]# cd /usr/lib/systemd/system[root@web1 system]# svn import . file:///var/svn/project -m "注释:我导入的是systemd的配置文件"修改配置文件,创建账户与密码所有配置文件,要求顶头写,开头不要有空格[root@web1 system]# cd /var/svn/project/conf[root@web1 system]# vim svnserve.conf................................................anon-access = none 19行,匿名无任何权限auth-access = write 20行,有效账户可写password-db = passwd 27行,密码文件authz-db = authz 34行,ACL访问控制列表文件[root@web1 system]# vim passwd....................................................[users]harry = 123456 用户名和密码tom = 123456 用户名和密码[root@web1 ~]# vim authz.....................................................[/] 定义ACL访问控制harry = rw 用户对项目根路径可读可写tom = rw启动服务[root@web1 ~]# svnserve -d -r /var/svn/project-d是启动服务放后台 -r共享目录[root@web1 ~]# netstat -nutlp | grep svnserve[root@web1 ~]# ss -nutlp | grep svnserve客户端测试(192.168.2.200)[root@web2 ~]# cd /tmp[root@web2 tmp]# svn --username harry --password 123 co svn://192.168.2.100 codeco是全部都下载[root@web2 tmp]# cd code[root@web2 code]# ls[root@web2 code]# vim user.slice 挑选任意文件修改其内容[root@web2 code]# svn ci -m "modify user"ci是上权 将本地修改的数据同步到服务器[root@web2 code]# svn update 将服务器上新的数据同步到本地[root@web2 code]# ls -R | wc -l529[root@web2 code]# rm -rf *.service[root@web2 code]# ls -R | wc -l263[root@web2 code]# svn update 恢复[root@web2 code]# ls -R | wc -l529[root@web2 code]# svn info svn://192.168.2.100 查看版本仓库基本信息[root@web2 code]# svn log svn://192.168.2.100 查看版本仓库的日志[root@web2 code]# echo "test" > test.sh 本地新建一个文件[root@web2 code]# svn ci -m "new file" 提交失败,该文件不被svn管理[root@web2 code]# svn add test.sh 将文件或目录加入版本控制[root@web2 code]# svn ci -m "new file" 再次提交,成功[root@web2 code]# svn mkdir subdir 创建子目录[root@web2 code]# svn rm subdir 使用svn删除文件[root@web2 code]# svn ci -m "xxx" 提交一次代码[root@web2 code]# vim umount.target 任意修改本地的一个文件[root@web2 code]# svn diff 查看所有文件的差异[root@web2 code]# svn cat svn://192.168.2.100/umount.target 仅查看某一个文件的差异[root@web2 code]# sed -i 'd' tmp.mount 删除文件所有内容,但未提交[root@web2 code]# svn revert tmp.mount 还原tmp.mount文件[root@web2 code]# rm -rf *.target 任意删除若干文件[root@web2 code]# svn update 还原[root@web2 code]# sed -i '1a #test###' tuned.service 修改本地副本中的代码文件[root@web2 code]# svn ci -m "xxx" 提交代码[root@web2 code]# svn merge -r7:2 tuned.service 将文件从版本7还原到版本2多人协同工作[root@web1 ~]# cd /tmp[root@web1 tmp]# svn --username tom --password 123 co svn://192.168.2.100 code[root@web2 ~]# cd /tmp[root@web2 tmp]# svn --username tom --password 123 co svn://192.168.2.100 code[root@web1 tmp]# cd code[root@web1 tmp]# cd codeharry和tom修改不同的文件[root@web1 code]# sed -i "3a ###tom modify#####" tmp.mount[root@web1 code]# svn ci -m "has modified"[root@web2 code]# sed -i "3a ###harry modify#####" tmp.mount[root@web2 code]# svn ci -m "has modified"[root@web1 code]# svn update[root@web2 code]# svn update
正在升级 ‘.’: 在 “/tmp/code/user.slice” 中发现冲突。 选择: § 推迟,(df) 显示全部差异,(e) 编辑, (mc) 我的版本, (tc) 他人的版本, (s) 显示全部选项: mc G user.slice 更新到版本 x。
harry和tom修改相同文件的不同行[root@web1 code]# sed -i '3a #tomtomtom' user.slice[root@web1 code]# svn ci -m 'xx'[root@web2 code]# sed -i '6a #harry#' user.slice[root@web2 code]# svn ci -m 'xx' 提交失败[root@web2 code]# svn update[root@web2 code]# ls user.slice*[root@web2 code]# mv user.slice.mine user.slice[root@web2 code]# rm -rf user.slice.r*[root@web2 code]# svn ci -m 'xx'[root@web1 svn]# svnadmin dump /var/svn/project > my.bak 备份[root@web1 ~]# svnadmin create /var/svn/project2[root@web1 ~]# svnadmin load /var/svn/project2 < my.bak 还原
转载地址:http://ehnwi.baihongyu.com/