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 "%r" %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服务器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727610324a1122783.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论