admin管理员组

文章数量:1568357

构建Nginx服务器

主机名 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)

构建Nginx服务器

[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.5
2.用户认证
[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.conf
server {				35行
        listen       80;			端口
        server_name  www.A;	域名
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;		域名
	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         www.B
    [root@client ~]# firefox http://www.A
    [root@client ~]# firefox http://www.B

[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;
	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/hosts
192.168.4.5   www.A         www.B       www.C
[root@client ~]# firefox https://www.C
			信任证书后可以访问

部署LNMP环境

安装的软件

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
<?php
$i=33;
echo $i;
?>
[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.conf
location匹配用户的地址栏(域名后面开始)
http{
	server {
		listen 80;
		server_name www.D;
location / { allow all; }
		  允许  所有
location /abc { deny 1.1.1.1; allow all; }
		      拒绝   1.1.1.1     允许  所有
location ~ \.php$ { deny all; }
		    允许  所有
		}
	}
[root@client ~]# vim /etc/hosts
192.168.4.5   www.A         www.B       www.C     www.D
[root@client ~]# firefox http://www.D
###################################################
[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------------>www.jd
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.A;
	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
访问a.html重定向到b.html(跳转地址栏)
http://192.168.4.5a.html ---->http://192.168.4.5/b.html
http://www.a/a.html --->http://www.a/b.html
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.A;
	rewrite ^/ http://www.tmooc;	38行
[root@proxy ~]# nginx -s reload
####################################################
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
server {
	listen       80;
	server_name  www.A;
	#rewrite ^/ http://www.tmooc;
	rewrite /(.*) http://www.tmooc/$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.html
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  www.A;
        #rewrite ^/   http://www.tmooc;
        #rewrite /(.*) http://www.tmooc/$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.html
lam
[root@client ~]# firefox http://192.168.4.5/lsc.html
lsc
地址重写格式【总结】
rewrite 旧地址 新地址 [选项];
last 不再读其他rewrite
break 不再读其他语句,结束请求
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.100
192.168.2.100
[root@proxy ~]# curl http://192.168.2.200
192.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/$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.5
192.168.2.100
[root@client ~]# curl http://192.168.4.5
192.168.2.200

weight设置服务器权重值,默认值为1 max_fails设置最大失败次数 fail_timeout设置失败超时时间,单位为秒 down标记服务器已关机,不参与集群调度


[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
upstream 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.5
192.168.2.100
[root@client ~]# curl http://192.168.4.5
192.168.2.100
[root@client ~]# curl http://192.168.4.5
192.168.2.200
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
upstream 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.5
192.168.2.100
[root@client ~]# curl http://192.168.4.5
192.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.5
192.168.2.100
[root@client ~]# curl http://192.168.4.5
192.168.2.200
[root@client ~]# curl http://192.168.4.5
192.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.5
192.168.2.200
一直是192.168.2.200
[root@web2 ~]# systemctl stop httpd
[root@client ~]# curl http://192.168.4.5
192.168.2.100
一直是192.168.2.100
IP----------------->IP (23.35.11.87)hash%2 =0
IP----------------->IP (23.35.11.87)hash%2 =0
IP----------------->IP (1.1.1.1)HASH%2 =1
IP----------------->IP (1.1.1.1)HASH%2 =1
[root@client ~]# echo 192.168.4.5 | md5sum

7层http代理[dhcp,ftp,ssh,http,dns…]

4层tcp/udp代理

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.conf
stream {
        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压缩功能,提高数据传输效率 开启文件缓存功能

修改Nginx配置文件,自定义报错页面

[root@proxy nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf
error_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/xxxx
Ym 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/ABC
Active connections: 1
Active connections:当前活动的连接数量
server accepts handled requests
Accepts:已经接受客户端的连接总数量 Handled:已经处理客户端的连接总数量
 37 37 319
  握手 请求
Reading: 0 Writing: 1 Waiting: 0
Reading:当前服务器正在读取客户端请求头的数量
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/bash
URL=http://192.168.4.5/index.html?
for i in {1..5000}
do
    URL=${URL}v$i=$i
done
curl $URL		经过5000次循环后,生成一个长的URL地址栏
[root@proxy ~]# ./buffer.sh
.. ..
<center><h1>414 Request-URI Too Large</h1></center>   				提示头部信息过大
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
    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.conf
server {
	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.pid
1996
[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 进程号

日志文件越来越大怎么办?单个文件10G? 如何切割?(非常常见的面试题) 每周5的03点03分自动执行脚本完成日志切割工作

[root@proxy ~]# vim /usr/local/nginx/logbak.sh
#!/bin/bash
date=`date +%Y%m%d`
logpath=/usr/local/nginx/logs
mv $logpath/access.log $logpath/access-$date.log
mv $logpath/error.log $logpath/error-$date.log
kill -USR1 $(cat $logpath/nginx.pid)
[root@proxy ~]# crontab -e
03 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.types
audio/mpeg		mp3
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
http {
.........................................
	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次会被缓存

}

优化:8个点

######################################################
[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		SID
1.用户名,密码----------------->验证 (登陆成功): 生成文件(tom,logined)
[root@web1 ~]# echo a | md5sum		文件名
60b725f10c9c85c70d97880dfe8191b3  -
2.返回页面<-------------------数据包的头部信息(cookies:Sid)
3.浏览器保存cookies=Sid
client  F5-------------->server		SID
4.再次访问浏览器(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			定义变量,变量名称为name
plj			输入变量的值,值为plj                
STORED
get name				获取变量的值
VALUE name 0 3			输出结果
plj
END
##提示: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.conf
upstream 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.html
<h1>Welcome to nginx!2.100</h1>		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

部署Tomcat服务器软件

[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/tomcat
bin/				#主程序目录
lib/				#库文件目录
logs/				#日志目录  
temp/				#临时目录
work/				#自动编译目录jsp代码转换servlet
conf/				#配置文件目录
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.jsp
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>
			显示服务器当前时间
</center>
</body>
</html>
[root@web1 ROOT]# firefox http://192.168.2.100:8080/lsc.jsp
使用Tomcat部署虚拟主机
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
.........................................................
	<Host name="www.A"  appBase="A"	123行
		unpackWARs="true" autoDeploy="true">
		</Host>
	<Host name="www.B"  appBase="B"
		unpackWARs="true" autoDeploy="true">
		</Host>
	<Host name="localhost"  appBase="webapps"
		unpackWARs="true" autoDeploy="true">
.........................................................
[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/hosts
192.168.2.100   www.A       www.B
[root@proxy ~]# firefox http://www.A:8080
[root@proxy ~]# firefox http://www.B:8080
[root@proxy ~]# firefox http://www.A:8080   http://www.B:8080     http://192.168.2.100:8080  &
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
...........................................................
	<Host name="www.B"  appBase="B"
		unpackWARs="true" autoDeploy="true">
		<Context path="" docBase="base" />
	</Host>
...........................................................
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh
[root@proxy ~]# firefox http://www.B:8080
[root@web1 ~]# vim /usr/local/tomcat/conf/server.xml
..........................................................
	<Host name="www.A"  appBase="A"
		unpackWARs="true" autoDeploy="true">
		<Context path="/test" docBase="/var/www/html/" />
	</Host>
..........................................................
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh
[root@proxy ~]# firefox http://www.A: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
<!--去调
    <Connector port="8443"	85行 protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
        keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" clientAuth="false" sslProtocol="TLS" />
-->去调
[root@web1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web1 ~]# /usr/local/tomcat/bin/startup.sh
[root@proxy ~]# firefox https://www.A:8443   https://www.B: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/logs
catalina.年.月.日.log
catalina.out
配置Tomcat日志
[root@web1 logs]# vim /usr/local/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
	prefix="localhost_access_log" suffix=".txt"
	pattern="%h %l %u %t &quot;%r&quot; %s %b" />
[root@web1 logs]# /usr/local/tomcat/bin/shutdown.sh
[root@web1 logs]# /usr/local/tomcat/bin/startup.sh
[root@web1 logs]# ls
A.2019-03-27.log ....................

制作nginx的RPM包

[root@room9pc01 ~]# yum -y install git
[root@room9pc01 ~]# git clone https://github/redhatedu/1812
[root@room9pc01 ~]# ls -d 1812/
[root@room9pc01 ~]# cd 1812/
[root@room9pc01 1812]# cat test.sh
#!/bin/bash
for i in {1..10}
do
	echo hello $i
done
[root@room9pc01 1812]# vim test.sh
#!/bin/bash
#this is a loop script
for i in {1..10}
do
	echo hello $i
done
[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/账户名称/仓库名称
#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 update
RPM (怎么用源码包做一个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.spec
Name:nginx
Version:1.12.2
Release:        1%{?dist}
Summary:this is a web server
#Group:
License:GPL
URL:www.abc
Source0:nginx-1.12.2.tar.gz
#BuildRequires: 
#Requires:      
%description
this is a web server to.

%post
useradd nginx
touch /tmp/nginx.txt
%prep
%setup -q
%build
./configure --with-http_ssl_module
make %{?_smp_mflags}
%install
make 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

配置GRE VPN

[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 -l
2961
[root@proxy kernel]# ls
drivers驱动	crypto加密	virt虚拟化	net网络
mm内存		
[root@proxy kernel]# cd sound/
[root@proxy sound]# modprobe ac97_bus
Client主机创建VPN隧道
[root@client ~]# ip help
[root@client ~]# ip tunnel help
add	新建	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.10
ip 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 tun0
add 自己	peer 对方
[root@client ~]# ip addr show tun0
[root@client ~]# ip a s eth3
					査看隧道IP
1.激活gre	2.创建隧道	3.配隧道IP
Proxy主机创建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			服务器本地IP
remoteip 192.168.3.100-150	分配给客户端的IP池
[root@proxy vpn]# vim /etc/ppp/options.pptpd
				/require
require-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.conf
left=201.1.2.10		重要,服务器本机的外网IP
right=%any			允许任何客户端连接
创建IPSec预定义共享密钥
当是conf主配置文件
当是secrets密钥
[root@client ipsec.d]# abc.secrets
201.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 xl2tpd
gre---> pptp ---> xl2tp+ipsec
NTP时间同步
安装软件包
[root@proxy ~]# yum -y install chrony
[root@proxy ~]# rpm -qc chrony		查看配置文件列表
修改配置文件
[root@proxy ~]# vim /etc/chrony.conf
server0 192.168.4.5 iburst
	server用户客户端指向上层NTP服务器
allow 192.168.4.0/24
	允许那个IP或网络访问NTP
#deny  192.168.4.1
	拒绝那个IP或网络访问NTP
local 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 iburst
pssh远程套件工具
安装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/hosts
192.168.2.100   web1
192.168.2.200   web2
192.168.4.10    client
创建主机列表文件
[root@proxy ~]# vim /root/host.txt
			每行一个用户名、IP或域名
root@web1
root@web2
root@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		(并发)

Nginx调度器+memcached

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.100
192.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<Tab><Tab>
[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.vcl
backend 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.5
192.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 code
co是全部都下载
[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 -l
529
[root@web2 code]# rm -rf *.service
[root@web2 code]# ls -R | wc -l
263
[root@web2 code]# svn update		恢复
[root@web2 code]# ls -R | wc -l
529
[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 code
harry和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					还原

本文标签: 服务器Nginx