Operation
2023-07-17 11:07:09 0 举报
AI智能生成
liunx
作者其他创作
大纲/内容
day01
环境<br>
yum -y install vim #安装vim编辑器<br><font color="#e74f4c">yum list | grep bash #查询名字和bash有关的软件包<br>yum -y install bash-completion #安装支持tab键的软件包,装好之后,使用exit退出,重新登录才生效</font><br>Yum -y install net-tools #安装网络相关软件包<br>yum -y install psmisc #安装支持killall命令的软件<br>yum -y install gcc make #安装编译工具<br>yum -y install pcre-devel #安装可以让nginx支持正则的软件包<br>yum -y install openssl-devel #安装可以让nginx支持安装加密网站的软件包
Nginx<br>
安装源码包: <br>yum -y install gcc make #安装编译工具<br>yum -y install pcre-devel #正则表达式依赖包<br>yum -y install openssl-devel #SSL加密依赖包<br>tar -xf nginx-1.22.1.tar.gz<br>cd nginx-1.22.1<br><br>[.....1] ./configure \<br>--prefix=/usr/local/nginx \ #指定安装路径<br>--user=nginx \ #指定用户<br>--group=nginx \ #指定组<br>--with-http_ssl_module #开启SSL加密功能<br><br>make #编译<br>make install #安装
useradd -s /sbin/nologin nginx<br>/usr/local/nginx/sbin/nginx #启动服务<br>/usr/local/nginx/sbin/nginx -s stop #关闭服务<br>/usr/local/nginx/sbin/nginx -s reload #重新加载配置文件<br>/usr/local/nginx/sbin/nginx -V #查看软件信息<br><br>ss -unltp | grep nginx #只能查看自己的信息<br>ss -antpu | grep nginx #查看所有的信息<br>
用户认证
vim /user/local/nginx/conf/nginx.conf #配置文件 写入<br>server {<br> listen 80;<br> server_name localhost;<br> <font color="#e74f4c"> auth_basic "password"; #指令+参数;开启用户认证功能<br> auth_basic_user_file "/usr/local/nginx/pass"; #认证的密码文件<br></font><br>/user/local/nginx/sbin/nginx -s reload #重新加载配置 不报错<br>yum -y install httpd-tools #软件网站辅助包<br><font color="#e74f4c">htpasswd -c </font>/usr/local/nginx/pass tom #创建密码文件<br>htpasswd /usr/local/nginx/pass jerry #追加创建,不加c,加c 会覆盖<br>
配置文件:<br>/user/local/nginx/conf/nginx.conf <br>/user/local/nginx/conf/nginx.conf.default 配置文件,原版模板<br>
web 虚拟主机<br>
[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf<br> http <b><font color="#e74f4c">{</font></b><br> .. ..<br> server <font color="#569230"><b>{</b></font><br> listen 80; #端口<br> server_name www.a.com; #新虚拟主机定义域名<br> root html; #指定网站根路径(/usr/local/nginx/html)<br> index index.html index.htm; #默认页面,可以写两个,先读取index.html<br> <font color="#569230"><b>}</b></font><br><br> server<b><font color="#ed9745"> {</font></b><br> listen 80; #端口<br> server_name www.b.com; #默认的虚拟主机,修改域名<br> root html_b; #指定网站根路径<br> index index.html index.htm; #默认页面<br> <b><font color="#ed9745">}</font></b><br> <b><font color="#e74f4c"> }<br></font></b><br> mkdir html_b #创建b网站的目录<br> echo "nginx-A~~~" > html/index.html #创建a网站测试页<br> echo "nginx-B~~~" > html_b/index.html #创建b网站测试页<br> sbin/nginx -s reload #之后重新加载配置文件,服务必须是开启状态<br> vim /etc/hosts #修改hosts文件添加ip和域名的映射关系<br> 192.168.99.5 www.a.com www.b.com<br> curl www.a.com #检测a网站或b网站都可以看到页面
window文件:<br>windows环境配置hosts文件<br>C:\Windows\System32\drivers\etc\hosts<br>右键---属性---安全---编辑---users---完全控制打钩<br>然后用文本打开hosts,在最后添加<br>192.168.99.5 www.a.com www.b.com
SSL虚拟主机
源码安装Nginx时必须使用--with-http_ssl_module参数,<br>启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。<br>加密算法一般分为对称算法、非对称算法、信息摘要(hash值)。<br>对称算法有:AES、DES,主要应用在单机数据加密。<br>非对称算法有:RSA、DSA,主要应用在网络数据加密。<br>信息摘要:MD5、sha256,主要应用在数据完整性校验。
vim /usr/local/nginx/conf/nginx.conf<br>… … <br>server {<br> listen 443 ssl;<br> server_name localhost;<br> ssl_certificate cert.pem; #这里是证书文件<br> ssl_certificate_key cert.key; #这里是私钥文件<br> ssl_session_cache shared:SSL:1m;<br> ssl_session_timeout 5m;<br> ssl_ciphers HIGH:!aNULL:!MD5;<br> ssl_prefer_server_ciphers on;<br> location / {<br> root https; #加密网站根目录<br> index index.html index.htm;<br> }<br> }<br>末行模式: :98,115s/#// 取消98-115行的注释<br>
公钥/私钥
openssl genrsa > conf/cert.key #生成私钥<br>openssl req -x509 -key conf/cert.key > conf/cert.pem #生成证书,生成过程会询问诸如你在哪个国家之类的问题<br>Country Name (2 letter code) [XX]:dc 国家名<br>State or Province Name (full name) []:dc 省份<br>Locality Name (eg, city) [Default City]:dc 城市<br>Organization Name (eg, company) [Default Company Ltd]:dc 公司<br>Organizational Unit Name (eg, section) []:dc 部门<br>Common Name (eg, your name or your server's hostname) []:dc 服务器名称<br>Email Address []:dc@dc.com 电子邮件
验证
mkdir https #创建安全网站的目录<br>echo "https~~~~ " > https/index.html #创建安全网站的页面<br>sbin/nginx #服务没开的话开服务<br>sbin/nginx -s reload #已经开了的话重加载配置<br>curl -k https://192.168.99.5 #检验,<font color="#a23c73">-k是忽略安全风险</font><br>https~~~~ #这个内容实验成功<br>systemctl stop firewalld #如果用真机的火狐浏览器测试需要<br>关闭防火墙,然后输入https://192.168.99.5
hash值:校验数据完整性
md5sum<br>md5sum 文件名 | md5sum 多次对比结果,如果数据变化 则被篡改<br>
sha256sum<br>sha512sum<br>
day02
动态网站 解析<br>
nginx用网络连接php-fpm
部署LNMP<br>
linux操作系统<br>Nginx网站服务软件<br>MySQL、MariaDB数据库<br>网站开发语言(php\python)<br>
1.nginx: <br> 源码安装---解码---./configure---make && make install<br>2.mariadb(数据库客户端软件)<br> mariadb-server(数据库服务器软件)<br> mariadb-devel(其他客户端软件的依赖包)<br>3.php(解释器)<br> <font color="#e74f4c">php-mysqlnd</font>(PHP的数据库扩展包)<br> php-fpm(进程管理器服务,前两安装会自动安装)
步骤一: php-fpm配置文件<br><br>打开php-fpm配置文件,注意该配置文件中;(分号)是注释<br><br>vim /etc/php-fpm.d/www.conf<br>listen = 127.0.0.1:9000 #php-fpm端口号(使用网络通信)<br>;listen = /run/php-fpm/www.sock #注释该行<br>pm.max_children = 50 #最大进程数量<br>pm.start_servers = 5 #最小进程数量
步骤二:修改Nginx配置文件并启动服务<br><br>vim /usr/local/nginx/conf/nginx.conf<br>...<br> location ~ \.php$ { #~是使用正则表达式,匹配以.php结尾<br> root html;<br> fastcgi_pass 127.0.0.1:9000; #将请求转发给本机9000端口<br> fastcgi_index index.php;<br> <font color="#a23c73"><b>#</b></font>fastcgi_param SCRIPT_FILENAME ...........;<br> include fastcgi.conf; #加载fastcgi配置文件<br> }
步骤三:测试LNMP架构能否解析PHP页面<br><br>/usr/local/nginx/sbin/nginx -s reload<br>cp ~/lnmp_soft/php_scripts/mysql.php /usr/local/nginx/html <br> #拷贝动态网站测试页面到nginx中<br>http://192.168.99.5/mysql.php<br><br>客户端使用浏览器访问服务器PHP首页文档,检验是否成功<br>http://192.168.99.5/mysql.php<br>然后修改数据库内容进行测试<br>mysql #进入数据库<br> create user dc@localhost identified by '123'; #创建测试账户<br> quit; #退出<br><br>修改默认配置<br>...<br> location / {<br> root html;<br> index index.php index.html index.htm;<br> #设置默认首页为index.php,当用户在浏览器地址栏中只写域名或IP,<br> 不说访问什么页面时,服务器会把默认首页index.php返回给用户<br> }<br> ...
Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log<br>Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log<br>PHP默认错误日志文件为/var/log/php-fpm/www-error.log
nginx用socket方式连接php-fpm
1.php-fpm:<br>vim /etc/php-fpm.d/www.conf<br>[www]<br><font color="#e74f4c">;listen = 127.0.0.1:9000 #注释或删除该行<br>listen = /run/php-fpm/www.sock #socket方式(使用进程通信)<br>listen.acl_users = apache,nginx,nobody #添加nobody账户</font><br>systemctl restart php-fpm.service<br>ss -unltp | grep php-fpm #无法查看<br>ls -l /run/php-fpm/www.sock #查看 有acl策略<br>getfacl /run/php-fpm/www.sock
2.nginx:<br>vim /usr/local/nginx/conf/nginx.conf<br>...<br> location ~ \.php$ { #~是使用正则表达式,匹配以.php结尾<br> root html;<br> <font color="#e74f4c">#fastcgi_pass 127.0.0.1:9000; #注释或删除该行<br> fastcgi_pass unix:/run/php-fpm/www.sock; #将请求转发给php-fpm进程</font><br> ......................<br> }
地址重写<br>nginx高级技术<br>
rewrite 旧地址 新地址 选项<br>匹配正则
1.同一网站:<br>vim conf/nginx.conf<br>修改一:.. ..<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite /a.html /b.html;<br>...........................<br>修改二:<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite /a.html /b.html redirect; #地址栏随之发生改变<br>...........................<br><br>
修改三:<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite /a.html$ /b.html redirect; #严格匹配 a.html结尾<br>...........................<br>修改四:<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite ^/a.html$ /b.html redirect; #严格匹配 以a.html开头结尾<br>...........................<br>修改五:<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite ^/a\.html$ /b.html redirect; #.在正则表示任意,加转译\,只能表示.,严格匹配a.html<br>...........................
2.不同网站:<br>修改一:<br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite / http://www.tmooc.cn/;<br>....................................<br><br>
修改二:<br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br>server {<br> listen 80;<br> server_name localhost;<br> rewrite /(.*) http://www.tmooc.cn/$1;<br>...................................
不同浏览器:<br>mkdir html/firefox<br>echo firefox~~ > html/firefox/abc.html #火狐专用页面<br>echo others~~ > html/abc.html #其他浏览器专用页面<br><br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br>server {<br> listen 80;<br> server_name localhost;<br>if ($http_user_agent ~* firefox) { #设置火狐浏览器<br>rewrite (.*) /firefox/$1; #就进行地址重写,用户看火狐专用页面$http_user_agent是nginx内置变量,存储用户信息,~是匹配正则包含,*是忽略大小写<br>}
选项:<br>redirect 临时重定向,状态码302,爬虫不更新URI<br>permanent 永久重定向,状态码301,爬虫更新URI<br>last 不再读其他语句,但还会继续匹配其他location语句<br>break 不再读其他语句,结束请求
1.last:<br>echo "nginx-c~~" > html/c.html #准备素材c页面<br>rewrite /a.html /b.html last; #没有其他location语句时,打开b页面<br>rewrite /b.html /c.html ;<br><br>2.break <br>location / { #此处为默认的location<br> rewrite /a.html /b.html break; #break可以阻止后面的语句 <br> root html;<br> index index.html index.htm;<br> }<br>location /b.html { #这里是新添加的location<br> rewrite /b.html /c.html;<br> }<br><br><font color="#e74f4c"><b>##last 用于同一个location; break用于不同location!</b></font><br>
day03
nginx 调度器、集群优化
HTTP <br>反向代理:网站业务代理<br><br>优化:权重、健康检查、<br> ip_hash、down<br>
1.轮询:逐一循环调度,默认值1<br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br>http {<br>.. ..<br>#使用upstream定义后端服务器集群,集群名称任意(如webserver)<br>#使用server定义集群中的具体服务器和端口<br><font color="#e74f4c">upstream webserver {<br> server 192.168.99.100:80;<br> server 192.168.99.200:80;<br> }</font><br>.. ..<br>server {<br> listen 80;<br> server_name localhost;<br> location / { #通过proxy_pass将用户的请求转发给webserver集群<br> <font color="#e74f4c">proxy_pass http://webserver; #webserver 自定义名,保持一致即可!</font><br> }
2.weight:指定轮询几率,权重值与访问比率成正比(正整数),加权轮询!<br>。。。。。。。<br> server 192.168.99.100:80 <font color="#e74f4c">weight=2</font>;<br> server 192.168.99.100:80;<br>。。。。。。。<br><br>健康检查设置:<br>。。。。。。。<br> server 192.168.99.100:80;<br> server 192.168.99.100:80 <font color="#e74f4c">max_fails=2 fail_timeout=30</font>;<br>。。。。。。。
集群优化:权重---加权轮询---健康检查---IP_hash<br>集群健康检查:集群自带健康检查,默认检查次数1次,默认再次检查时间10s;<br> 默认值受网络延迟影响,可自定义;<br> # max_fails可以设置后台服务器的失败次数<br> # fail_timeout可以设置后台服务器的失败超时时间
3.ip_hsah:相同客户机,访问相同服务器,再次访问不再轮询<br>upstream webserver {<br> ip_hash;<br> server 192.168.99.100:80;<br>。。。。。。。<br> #根据客户端前三位IP值,固定后端服务器<br>
4.添加down标记:让集群主机<font color="#e74f4c">暂时</font>不参与集群活动<br>upstream webserver {<br> server 192.168.99.100:80 down;<br> server 192.168.99.200:80;<br>..............................<br>
TCP/UDP <br>四层代理:其他业务集群
四层代理:其他业务集群<br> nginx需要添加模块<br> ./configure --with-stream<br>
vim /usr/local/nginx/conf/nginx.conf<br><font color="#e74f4c">stream {<br> upstream backend {<br> server 192.168.99.100:22; #后端SSH服务器的IP和端口<br> server 192.168.99.200:22;<br>}<br> server {<br> listen 12345; #Nginx监听的端口<br> proxy_pass backend;<br> }<br>}</font><br>http {<br>.. ..<br><br>ssh 192.168.88.5 -p 12345 #使用该命令多次访问查看效果<br><br>如果配置没有错误,但无法反复登陆web1与web2,可以按下列方式解决:<br>rm -rf ~/.ssh/known_hosts #在proxy中删除记录文件
nginx 网站功能<br>
步骤一:自定义报错页面<br>HTTP常见状态码列表:<br>200 正常<br>301 & 302 重定向<br>400 请求语法错误<br>401 访问被拒绝<br>403 禁止访问<br>404 资源找不到<br>414 请求URI头部太长<br>500 服务器内部错误<br>502 代理服务器无法正常获取下一个服务器正常的应答<br><br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br> charset utf-8; #仅在需要中文时修改该选项<br>error_page 404 /test.html; #自定义错误页面,显示自定义test.html中的内容<br>.. ..
步骤二:如何查看服务器状态信息(非常重要的功能)<br>编译安装时使用--with-http_stub_status_module开启状态页面模块<br>如果要添加模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall nginx 再重启即可<br><font color="#ed9745">1.--------------------------------------------------------------------------------------------------------------</font><br>./configure \<br>> --with-stream #开启4层代理模块<br>> --with-http_stub_status_module #开启status状态页面<br><font color="#ed9745">2.--------------------------------------------------------------------------------------------------------------</font><br>make #编译 ,已经安装过,直接编译即可<br>[....nginx-1.22.1]# cp objs/nginx /usr/local/nginx/sbin/ #覆盖原文件<br>/usr/local/nginx/sbin/nginx #开启nginx<br><font color="#ed9745">3.--------------------------------------------------------------------------------------------------------------</font><br>vim /usr/local/nginx/conf/nginx.conf<br>… …<br>location /status {<br> stub_status on;<br> #allow IP地址;<br> #deny all;<br> .................................<br><font color="#ed9745">4.--------------------------------------------------------------------------------------------------------------</font><br>curl http://192.168.99.5/status<br>Active connections: 1 ##Active connections:当前活动的连接数量<br>server accepts handled requests Accepts:已经接受客户端的连接总数量 <br> 10 10 3 Handled:已经处理客户端的连接总数量<br>Reading: 0 Writing: 1 Waiting: 0 Requests:客户端发送的请求数量<br> Reading:当前服务器正在读取客户端请求头的数量<br> Writing:当前服务器正在写响应信息的数量<br> Waiting:当前多少客户端在等待服务器的响应<br>
步骤三:优化Nginx并发量<br>1.<br>关闭selinux firewalld 装包http-tools<br>ab -n 100 -c 100 http://192.168.99.5/ #-n任务量,-c是连接数<br><font color="#ed9745">2.--------------------------------------------------------------------------------</font><br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br>worker_processes 2; #调整为与当前CPU核心数量一致<br>events {<br>worker_connections 50000; #每个worker最大并发连接数<br>}<br>.. ..<br><br>查看进程:ss -unltp | grep nginx<br> ps aux | grep nginx<br><br>3.优化系统本身<font color="#ed9745">:------------------------------------------------------------</font><br>ulimit -n #查看最大文件数量<br>ulimit -n 100000 #临时设置最大文件数量<br>vim /etc/security/limits.conf<br> .. ..<br> * soft nofile 100000<br> * hard nofile 100000<br>#用户或组 硬限制或软限制 需要限制的项目 限制的值
步骤四:优化Nginx数据包头缓存,支持超长地址<br>优化前,使用脚本测试超长头部请求是否能获得响应<br>默认情况下nginx无法支持长地址栏,会报414错误<br><br>cat lnmp_soft/buffer.sh <br>#!/bin/bash<br>URL=http://192.168.99.5/index.html?<br>for i in {1..5000}<br>do<br> URL=${URL}v$i=$i<br>done<br>curl $URL #经过5000次循环后,生成一个超长的URL地址<br><br>[root@proxy ~]# ~/lnmp_soft/buffer.sh<br><center><h1>414 Request-URI Too Large</h1></center> #访问失败<br>vim<br>vim /usr/local/nginx/conf/nginx.conf<br>.. ..<br>http {<font color="#e74f4c"><br>client_header_buffer_size 200k; #请求包头部信息的缓存大小 <br>large_client_header_buffers 4 200k; #最大请求包头部信息的缓存个数与容量</font><br>.. ..<br>}
步骤五:浏览器本地缓存静态数据<br>修改Nginx配置文件,定义对静态页面的缓存时间<br><br>vim /usr/local/nginx/conf/nginx.conf<br>http {<br><font color="#e74f4c">location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {<br>expires 30d; #定义客户端缓存时间为30天</font><br>}
day04
准备环境:(部署)<br>装包 nginx mariadb php<br>配置:web1 web2 动静分离; proxy 网站的反向代理<br> php:<br> 方式一:网络 /etc/php-fpm.d/www.conf 方式二:进程接口 <br> listen = 127.0.0.1:9000 listen = /run/php-fpm/www.sock<br> listen.acl_users = apache,nginx,nobody<br> vim conf/nginx.conf-------------网站\\\\进程接口<br>
session与cookie
Session:存储在服务器端,保存用户名、登陆状态等信息。
Cookies:由服务器下发给客户端,保存在客户端的一个文件里。保存的内容主要包括:SessionID。
session文件:<br>ls /var/lib/php/session<br>
session共享<br>redis服务<br>
redis服务----内存存数据----数据库-----存储有生命周期的数据<br>mariadb-----硬盘存数据----数据库-----永久存储数据<br>
Redis(Remote Dictionary Server )远程字典服务<br> Key-Value数据库<br> 数据可以存储在内存中以保证高性能<br>
装包:单独一台虚拟机存<br> yum -y install redis<br> 默认端口:6379<br>配置文件:/etc/redis.conf<br>
vim /etc/redis.conf<br>#bind 127.0.0.1<br>protected-mode no #不开启保护模式<br>
redis-cli #进入redis命令行<br>set abc 456 #创建变量abc,里面的值是456<br>get abc #查看变量abc的值<br>keys * #查看当前库中所有key<br>del abc #删除变量abc<br>flushall #删除所有数据<br>quit #退出
共享设置
yum -y install ~/lnmp_soft/php_scripts/phpredis-5.1.0-1.x86_64.rpm <br> #有依赖,不能rpm直接安装<br>vim /etc/php-fpm.d/www.conf #修改该配置文件的两个参数<br> php_value[session.save_handler] = redis<br> php_value[session.save_path] = "tcp://192.168.99.5:6379"<br>systemctl restart php-fpm<br>清空浏览器的历史记录,再访问http://192.168.99.5仅登录一次即可成功
day05
Tomcat服务器<br>启动服务:/usr/local/tomcat/bin/startup.sh<br>关闭服务:usr/local/tomcat/bin/shutdown.sh<br>配置文件:usr/local/tomcat/conf/server.xml
概述:<br>java 是一种跨平台的、面向对象的程序设计语言,具有卓越的通用性/高效性/平台移植性、安全性<br>--java SE 标准版 --java EE 企业版<br><br>JDK是Sun针对java开发者推出的java语言的软件开发工具包<br> 是java的核心<br>---java运行环境 ---java工具 ---java基础的类库<br><br>JRE是JDK的子集<br>----java虚拟机 ---java核心类库和支持文件 ----不包括开发工具———编译器、调试器、其他工具<br><br>Servlet 是java扩展web服务器功能的组建规范<br>IBM webspherre Oracle weblogic<br>Apache tomcat RedHat Jboss<br>
一:<br>步骤一:部署Tomcat服务器软件<br>yum -y install java-1.8.0-openjdk #安装JDK<br>java -version #查看JAVA版本<br>...oft]# tar -xf apache-tomcat-8.0.30.tar.gz<br>...oft]# mv apache-tomcat-8.0.30 /usr/local/tomcat<br>...oft]# ls /usr/local/tomcat<br>ss -nutlp |grep java #查看java监听的端口<br><br>若无法开启三个端口 8080 ;8005 ;8009 <br>mv /dev/random /dev/random.bak<br>ln -s /dev/urandom /dev/random<br>killall java<br>/usr/local/tomcat/bin/startup.sh<br>http://192.168.99.100:8080 #测试<br><br>步骤二:修改Tomcat配置文件<br>echo "tomcat-test~~~~" > webapps/ROOT/test01.html #创建静态页面<br>vim /usr/local/tomcat/webapps/ROOT/test02.jsp #测试JSP页面<br><html><br><body><br><center><br>Now time is: <%=new java.util.Date()%><br></center><br></body><br></html>
二:使用Tomcat部署虚拟主机<br>步骤一:配置服务器虚拟主机<br>1)修改server.xml配置文件,创建虚拟主机<br>vim /usr/local/tomcat/conf/server.xml<br>...<br> <Host name="www.b.com" appBase="web_b"><br> </Host><br> <Host name="www.a.com" appBase="webapps" unpackWARS="true" autoDeploy="true"><br> </Host><br>2)创建虚拟主机对应的页面根路径并测试<br>mkdir -p web_b/ROOT #创建b网站的目录<br>...cat]# echo "tomcat-A~~~" > webapps/ROOT/index.html<br>...cat]# echo "tomcat-B~~~" > web_b/ROOT/index.html<br>vim /etc/hosts <br>192.168.99.100 www.a.com www.b.com <br>重启 tomcat<br>curl www.a.com:8080 #测试<br>tomcat-A~~~<br>curl www.b.com:8080<br>tomcat-B~~~<br>3)查看虚拟主机www.a.com的配置 <br>unpackWARs="true" #自动解war包<br>autoDeploy="true" #自动更新开发工程师编写的网站功能<br>yum -y install java-1.8.0-openjdk-devel #安装可以制作war包的工具<br>tar -cf a.war /var/log #之后可以使用jar命令打war包<br>cp a.war webapps #将war包放入虚拟主机的网页目录<br> ls webapps #检查,可以看到已经自动解开,如果无效可以尝试重启tomcat
步骤二:tomcat访问路径与页面位置<br><font color="#ed9745"><b>测试1:----------------------------------------------------------------------------------</b></font><br>vim /usr/local/tomcat/conf/server.xml<br> <Host name="www.b.com" appBase="web_b"> <br><font color="#e74f4c"> <Context path="" docBase="" /> </font> #默认是ROOT,不写直接访问web_b/index.html <br> </Host><br>echo "web_b/ROOT/index.html" > web_b/ROOT/index.html #默认页面路径<br>echo "web_b/index.html" > web_b/index.html #创建素材,定义新路径<br>curl www.b.com:8080 #测试可以看到的是默认的页面路径<br>web_b/ROOT/index.html<br>重启tomcat<br>curl www.b.com:8080 #重启后测试可以看到新路径<br> web_b/index.html<br><b><font color="#ed9745">测试2:---------------------------------------------------------------------------------<br></font></b><Context path="" docBase="abc" /> #修改成abc<br>mkdir web_b/abc #创建测试目录<br>echo "web_b/abc/index.html" > web_b/abc/index.html #测试页面<br>curl www.b.com:8080 #查看,见到新路径<br> web_b/abc/index.html<br><b><font color="#ed9745">测试3:---------------------------------------------------------------------------------<br></font></b><Context path="" docBase="<b><font color="#ed9745">/</font></b>abc" /> #修改成/abc,根下的abc,绝对路径,<br> 不受tomcat约束,与appBase无关<br>curl www.b.com:8080 #得到新路径<br> /abc/index.html<br><font color="#ed9745"><b>测试4:---------------------------------------------------------------------------------<br></b></font><Host name="www.b.com" appBase="web_b><br><Context path=<font color="#e74f4c">"/test"</font> docBase="/abc" /> <br>#path后面添加内容可以匹配用户访问路径,当用户访问www.b.com:8080/test/时,看到的是/abc的内容,如果访问www.b.com:8080就看到web_b/ROOT的内容<br>curl www.b.com:8080/test/<br> /abc/index.html<br>curl www.b.com:8080<br> web_b/ROOT/index.html<br><b><font color="#ed9745">测试5:---------------------------------------------------------------------------------<br></font></b><Context path="/test" docBase="abc" /> #将/abc改成abc当用户访问www.b.com:8080/test/时,可以看到web_b/abc里的内容当用户访问www.b.com:8080时就看到web_b/ROOT的内容<br>重启tomcat<br>
步骤三:配置Tomcat支持SSL加密网站<br>1)创建加密用的私钥和证书文件<br>keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore <br>#提示输入密码为:123456<br>#-genkeypair 生成密钥对<br>#-alias tomcat 密钥别名<br>#-keyalg RSA 定义密钥算法为RSA算法<br>#-keystore 定义密钥文件存储在:/usr/local/tomcat/keystore<br>2)再次修改server.xml配置文件,创建支持加密连接的Connector<br><Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"<br>maxThreads="150" SSLEnabled="true" scheme="https" secure="true"<br> clientAuth="false" sslProtocol="TLS" <br>keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456"/><br>...<br>#备注,默认这段Connector被注释掉了,打开注释,添加密钥信息即可<br>3)重启Tomcat服务器 <br>4)查看 curl -k https://www.a.com:8443/<br><br>步骤四:配置Tomcat日志<br>1)为www.b.com虚拟主机开启日志<br>vim /usr/local/tomcat/conf/server.xml<br><Host name="www.b.com" appBase="web_b" ><br>...<br>#从默认localhost虚拟主机中把Valve这段复制过来,适当修改下即可<br><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"<br> prefix="www-b-com" suffix=".log"<br> pattern="%h %l %u %t &quot;%r&quot; %s %b" /> # 格式<br></Host><br>directory="logs" : 日志位置 ; prefix="www-b-com":日志自定义名 ; suffix=".log" :扩展名<br>2)重启<br>3)查看 cat /usr/local/tomcat/logs/www-b-com.2023.07.12.log
maven应用
使用Maven部署网站系统<br>软件项目管理工具,基于项目对象模型(POM),可管理项目的构建、报告、文档<br>配置:/usr/local/maven/conf/settings.xml<br><br>步骤一:安装maven工具,以及java环境<br>将三个文件传入虚拟机root的家目录,原地释放<br>apache-maven-3.6.3-bin.tar.gz #maven工具包<br>cms.tar.gz #网站项目<br>m2.tar.gz #依赖程序,释放之后是隐藏目录.m2<br>释放tar包,并拷贝到指定目录<br>tar -xf apache-maven-3.6.3-bin.tar.gz<br>mv apache-maven-3.6.3 /usr/local/maven<br>2)安装java依赖包<br>yum -y install java-1.8.0-openjdk<br>yum -y install java-devel<br>3)修改镜像地址,在第158行下添加<br>vim /usr/local/maven/conf/settings.xml <br> <mirror><br> <id>nexus-aliyun</id><br> <mirrorOf>*</mirrorOf><br> <name>Nexus aliyun</name><br> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <br> </mirror><br>
步骤二:配置数据库并打包项目<br><br>1)配置数据库<br>yum install -y mariadb-server<br>cd CMS/<br>cp src/main/resources/shishuocms.properties . <br> #拷贝网站数据库配置文件到当前目录,该文件定义了数据的用户名和密码等信息<br>mysql -uroot < sql/install.sql #导入网站相关数据库文件<br>mysqladmin password 12345678 #修改数据库密码<br>如果数据库密码输入错误<br> mysqladmin password -uroot -p #改密码,先输入旧密码,然后输入两次新密码<br>2)打包项目<br> /usr/local/maven/bin/mvn clean package #按照之前定义的<br> 公网服务器地址、数据库配置等内容打包项目,注意该命令要在CMS目录进行<br>步骤三:上线测试<br> cp ~/lnmp_soft/apache-tomcat-8.0.30/conf/server.xml /usr/local/tomcat/conf/<br> cp: 是否覆盖 "/usr/local/tomcat/conf/server.xml"? y #把tomcat的配置文件恢复默认<br> 重启tomcat <br> rm -rf /usr/local/tomcat/webapps/ROOT #删除原有默认页面目录<br> cp target/shishuocms-2.0.1.war /usr/local/tomcat/webapps/ROOT.war #将新项目移动到tomcat中,然后会自动解包,然后真机打开浏览器访问192.168.99.100:8080看到“师说”页面则成功
day06
1.配置nginx+tomcat集群<br>1) 在192.168.99.5主机上配置Nginx调度器<br>2) 在192.168.99.100和192.168.99.200主机上配置Tomcat<br>3)启服务<br>
1.vim /usr/local/nginx/conf/nginx.conf<br>http{<br> <font color="#e74f4c">upstream toms {<br> server 192.168.99.100:8080;<br> server 192.168.99.200:8080;<br> }</font><br> server {<br> location / {<br> <font color="#e74f4c">proxy_pass http://toms;<br></font>3.bin/startup.sh
2.制作nginx的RPM包<br>1)安装rpm-build软件<br>2)生成rpmbuild目录结构<br>3)准备工作,将源码软件复制到SOURCES目录<br>4)创建并修改SPEC配置文件<br>5)rpmbuild创建RPM软件包
rpmbuild -ba nginx.spec #会报错,没有文件或目录<br>ls /root/rpmbuild #自动生成的目录结构<br><br>cp nginx-1.22.1.tar.gz /root/rpmbuild/SOURCES/<br><br>vim /root/rpmbuild/SPECS/nginx.spec <br>Name:<font color="#e74f4c">nginx </font> #源码包软件名称<br>Version:<font color="#e74f4c">1.22.1 </font> #源码包软件的版本号<br>Release: <font color="#e74f4c">1 </font> #制作的RPM包版本号<br>Summary: <font color="#e74f4c">nginx is a web server software.</font> #RPM软件的概述 <br>License:GPL #软件的协议<br>URL: <font color="#e74f4c"> www.test.com </font> #网址<br>Source0:<font color="#e74f4c">nginx-1.22.1.tar.gz </font> #源码包文件的全称<br>#BuildRequires: #制作RPM时的依赖关系<br>Requires: <font color="#e74f4c">pcre-devel openssl-devel </font> #安装RPM时的依赖关系<br>%description<br><font color="#e74f4c">nginx is an HTTP and reverse proxy server. </font> #软件的详细描述<br><font color="#e74f4c">%post<br>useradd nginx -s /sbin/nologin </font> #非必需操作:安装后脚本(创建账户)<br>%prep<br>%setup -q #自动解压源码包,并cd进入目录<br>%build<br><font color="#e74f4c">./</font>configure<br>make %{?_smp_mflags}<br>%install<br>make install DESTDIR=%{buildroot}<br>%files<br>%doc<br><font color="#e74f4c">/usr/local/nginx/* </font> #对哪些文件与目录打包<br>%changelog<br><br>rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec<br>yum install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm
vpn服务
VPN<br>linux系统<br>
步骤一:启用GRE模块<br>lsmod #显示模块列表<br>lsmod | grep ip_gre #确定是否加载了gre模块<br>modprobe ip_gre #加载模块ip_gre
步骤二:web1主机创建VPN隧道<br>ip tunnel add tun0 mode gre remote 192.168.99.200 local 192.168.99.100<br> #ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助<br> #mode设置隧道使用gre模式<br> #local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址<br>ip addr add 10.10.10.100/8 peer 10.10.10.200/8 dev tun0<br> #为VPN配置隧道IP地址<br> #为隧道tun0设置本地IP地址10.10.10.100/24<br> #隧道对面的主机IP为10.10.10.200/24
ip add show tun0 #查看<br>p link set tun0 up #设置UP<br>add ------ del #查-----删<br>
测试 web1 web2 <br>ping 10.10.10.200<br>ping 10.10.10.100<br>
翻墙设置(非必需操作)<br>echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由转发<br>iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 201.1.2.10
VPN<br>windows系统
创建L2TP+IPSec VPN<br>
步骤一:部署IPSec服务<br>libreswan #安装加密工具<br>cp myipsec.conf /etc/ipsec.d/ #复制配置IPSec密钥验证配置文件到ipsec.d目录<br><br>配置:<br>vim /etc/ipsec.d/myipsec.conf #修改配置第16行<br> left=<font color="#e74f4c">192.168.99.100 </font> #设置为本机ip(此处在真实环境为公网ip)<br>vim /etc/ipsec.secrets #修改配置,添加加密信息<br> <font color="#e74f4c">192.168.99.100 %any: PSK "randpass" </font><br> #%any:是允许任何客户机连接本服务器,PSK预共享密钥,randpass是密码,等windows客户连接vpn服务器时需要该密码<br><br>...vpn]#yum -y install ./xl2tpd-1.3.8-2.el7.x86_64.rpm<br>vim /etc/xl2tpd/xl2tpd.conf #打开配置文件,32、33行<br> <font color="#e74f4c"> ip range = 10.10.10.10-10.10.10.18 </font> #给客户分配的ip<br> <font color="#e74f4c">local ip = 192.168.99.100 </font> #本机ip<br>vim /etc/ppp/options.xl2tpd #修改配置文件,将第10、16行注释掉,删除掉21行的#以及空格,就可以启用加密<br>#crtscts #注释该行<br>#lock #注释该行<br>vim /etc/ppp/chap-secrets #定义windows客户机的用户名和密码<br>tom * 123456 * #另起一行创建用户tom,配置密码123456
开启服务:<br> systemctl start ipsec #开启加密服务<br> ss -ntulp |grep :500 #检查加密服务<br> /usr/sbin/xl2tpd #开启vpn服务<br> ss -ntulp |grep xl2tpd #检查加vpn服务
windows设置:<br>配置ipv4 为99网段<br>设置Windows注册表,具体操作如下:<br> 单击"开始",单击"运行",键入"regedit",然后单击"确定"<br>找到下面的注册表子项,然后单击它:<br>HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\Rasman\Parameters<br> 在"编辑"菜单上,单击"新建"->"DWORD值"---改名为"ProhibitIpSec"<br>双击----"数值数据"框中,键入"1",然后单击"确定"<br>退出注册表编辑器,然后重新启动计算机<br>添加vpn连接<br>
systemd 服务管理<br>
使用systemd管理shell脚本<br>1)编写shell脚本<br> [root@web1 ~]# vim /root/test.sh <br> #!/bin/bash<br> while : <br> do<br> echo “zzaaa”<br> sleep 1<br> done<br>2.chmod +x /root/test.sh<br>3.编写Unit文件<br>cp /usr/lib/systemd/system/{crond.service,test.service}<br>vim /usr/lib/systemd/system/test.service<br> [Unit]<br> <font color="#e74f4c">Description=my test script <br> After=time-sync.target</font><br> [Service]<br> <font color="#e74f4c"> ExecStart=/root/test.sh<br> ExecReload=/bin/kill -HUP $MAINPID</font><br> KillMode=process<br> [Install]<br> WantedBy=multi-user.target
vim /usr/lib/systemd/system/nginx.service<br>[Unit]<br><font color="#e74f4c">Description=The Nginx HTTP Server</font> #描述信息<br><font color="#e74f4c">After=network.target remote-fs.target nss-lookup.target</font><br>[Service]<br><font color="#e74f4c">Type=forking </font>#仅启动一个主进程的服务为simple,启动若干子进程为forking<br><font color="#e74f4c">ExecStart=/usr/local/nginx/sbin/nginx<br>ExecReload=/usr/local/nginx/sbin/nginx -s reload</font><br><font color="#e74f4c">ExecStop=/bin/kill -s QUIT $MAINPID </font> #优雅的杀死,完成当前任务,再退出程序!<br> #/usr/local/nginx/sbin/nginx -s stop <br> #kill -s <信号>:指定要发送的信号,可以是信号名称或信号编号<br>[Install]<br>WantedBy=multi-user.target
day07
Nginx+uWSGI+python<br>动态页面+依赖软件<br>
nginx + python 动态网站<br>包:gcc make python3 python3-devel<br><br>python依赖:———><br>安装python的命令:pip3 install 包名<br><br>python 可以自己运行,不借助其他<br><br>测试无法连接外网,需要将<br>python-project-demo/learning_logs/templates/base.html<br>文件中的特效注释
pip3 install<font color="#e74f4c"> pytz-2022.6-py2.py3-none-any.whl</font><br>pip3 install<font color="#e74f4c"> Django-1.11.8-py2.py3-none-any.whl</font><br>pip3 install <font color="#e74f4c">django-bootstrap3-11.0.0.tar.gz<br><br></font>解:tar -xf python-project-demo.tar.gz<br>启服务:python3 名字 runserver 地址:端口<br> python3 manage.py runserver 0.0.0.0:8000<br><br><!-- {% bootstrap_css %}<br> {% bootstrap_javascript %}<br> -->
1.安装uWSGI<br>[root@proxy python-project-demo]# cd ..<br> [root@proxy python]# pip3 install uWSGI-2.0.21.tar.gz<br> [root@proxy python]# vim myproject.ini<br> [uwsgi]<br> socket=127.0.0.1:8000 #与web服务(nginx)通信的接口<br> chdir=/root/python/python-project-demo #项目的工作目录<br> wsgi-file=learning_log/wsgi.py #指定项目中的wsgi.py配置文件<br> daemonize=/var/log/uwsgi.log #指定日志文件位置<br> #processes=4 #指定启动进程的数目<br> #master=true #开启主进程管理模式
2.运行uWSGI<br>...python]# uwsgi --ini myproject.ini #读取myproject.ini运行uWSGI<br>3.修改nginx配置文件,添加uWSGI转发<br>vim /usr/local/nginx/conf/nginx.conf<br>...<br> location / {<br> uwsgi_pass 127.0.0.1:8000; #动态页面交给uWSGI<br> include uwsgi_params; #调用uWSGI配置文件<br> .........<br>
灰度发布
---使用比较平稳的过度方式升级或者替换产品项目的方法统称<br>---金丝雀发布<br>主要作用:<br>1.及时发现项目问题;2.尽早获取用户反馈信息以改进产品; 3.项目有问题,可将影响控制到最小<br>
1.配置Nginx实现用IP测试灰度发布<br>[root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf<br> http { <br> ...<br> upstream s8001 { #测试集群1<br> server 192.168.99.100:8001;<br> }<br> upstream s8002 { #测试集群2<br> server 192.168.99.200:8002;<br> }<br> upstream default { #正常业务集群<br> server 192.168.99.100:80;<br> server 192.168.99.200:80;<br> }<br> server {<br> listen 80;<br> server_name localhost;<br> ...<br> set $group "default"; #定义变量$group,默认值default<br> if ($remote_addr ~ "192.168.99.1"){ #如果客户机ip是99.1就访问集群1<br> set $group s8001;<br> }<br> if ($remote_addr ~ "192.168.99.2"){ #如果客户机ip是99.2就访问集群1<br> set $group s8002;<br> }<br> location / {<br> proxy_pass http://$group; #调用集群<br> root html;<br> index index.html index.htm;<br> }<br> ...<br> }
web1:<br>vim /usr/local/nginx/conf/nginx.conf<br> http { <br> ...<br> server {<br> listen 8001;<br> server_name localhost;<br> root html8001;<br> index index.html;<br> }<br> ...<br> }<br> [root@web1 nginx]# mkdir html8001<br> [root@web1 nginx]# echo web1-8001 > html8001/index.html<br><br>web2:<br>vim /usr/local/nginx/conf/nginx.conf<br>http {<br>...<br>server {<br> listen 8002;<br> server_name localhost;<br> root html8002;<br> index index.html;<br>}<br>...<br>}<br>[root@web2 nginx]# mkdir html8002<br>[root@web2 nginx]# echo web1-8002 > html8002/index.html
2.不同用户ID测试灰度发布:<br>---PHP动静分离<br>vim conf/nginx.conf<br>location ~ \.php$ {<br> root html;<br> fastcgi_pass 127.0.0.1:9000;<br> #fastcgi_pass unix:/run/php-fpm/www.sock;<br> fastcgi_index index.php;<br> #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;<br> include fastcgi.conf;<br> }<br>vim /etc/php-fpm.d/www.conf<br>listen = 127.0.0.1:9000<br>或:<br>listen = /run/php-fpm/www.sock
vim html/home.php #修改php页面,将原有Welcome那行修改成以下状态<br>Welcome : <?php<br>if(preg_match("/^abc/",$_SESSION['login_user'])) { <br> #preg_match匹配正则,如果登录账号是以abc开头,就连接99.100,否则连接99.200<br>echo "<a href='http://192.168.99.100'>开始</a>";<br>}<br>else<br>{<br>echo "<a href='http://192.168.99.200'>开始</a>";<br>}<br>?>
访问限制
限流限速<br>
1.定义limit_rate限制<br>vim /usr/local/nginx/conf/nginx.conf<br>http {<br>... <br> limit_rate 100k; #全局限速<br> server {<br> limit_rate 200k; #虚拟主机限速<br> listen 80;<br> server_name www.b.com;<br> root html;<br> index index.html;<br> location /file_a {<br> limit_rate 300k; #file_a目录限速300k<br> }<br> location /file_b {<br> limit_rate 0k; #file_b目录不限速<br> }<br> }
2)创建测试目录<br> [root@web1 nginx]# mkdir html/file_a<br> [root@web1 nginx]# mkdir html/file_b<br><br>3)创建测试文件<br> [root@web1 nginx]# dd if=/dev/zero of=html/test.img bs=100M count=1<br> [root@web1 nginx]# dd if=/dev/zero of=html/file_a/test.img bs=100M count=1<br> [root@web1 nginx]# dd if=/dev/zero of=html/file_b/test.img bs=100M count=1<br><br>4)下载测试<br> wget www.b.com/file_a/test.img<br> wget www.b.com/file_b/test.img<br><br>5)连接限制<br>http {<br> limit_conn_zone $binary_remote_addr zone=addr:10m; <br> server {<br> location /app {<br> limit_rate 30k; <br> limit_conn addr 1 ; <br> }
limit_conn_zone $binary_remote_addr zone=addr:10m;
$binary_remote_addr nginx内置变量,二进制的方式获得用户ip,并且以10m大小记录在addr文件中<br>
limit_conn 连接限制<br>
防盗链
valid_referers指令可以检测被访问资源从哪个地址来<br><br>1)修改配置,添加防盗链测试语句<br><br> [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf<br> server {<br> ... <br> valid_referers none 192.168.99.100; #如果请求中的referer 头字段包含者地址是99.100或者没有referer 头字段则有效,<br> if ($invalid_referer){ #如果上述测试无效则条件成立<br> return 403; #返回错误提示<br> }<br> ...<br> }<br><br>2)web1编写测试页面<br><br> [root@web1 nginx]# cat html/index.html<br> web1<br> 测试页面 --<br> <a href="http://192.168.99.100/nr.html">内容</a><br> [root@web1 nginx]# cat html/nr.html<br> web1内容页面<br><br>3)web2编写测试页面<br><br> [root@web2 nginx]# cat html/index.html<br> web2<br> 测试页面 --<br> <a href="http://192.168.99.100/nr.html">内容</a><br><br>4)测试,从192.168.99.100主页点内容可以访问,但从99.200点不可以
0 条评论
下一页