9134512079

yum -y install yum-plugin-fastestmirror

cat /etc/redhat-release
cat /etc/os-release

uname -msr

rpm –import /www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh /www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

yum repolist

# Install new Kernel version
yum –disablerepo=”*” –enablerepo=”elrepo-kernel” list available
# Intstall the LT version
yum –enablerepo=elrepo-kernel install kernel-lt

yum repolist all

# Configure Grub2 CentOS 7
sudo awk -F\’ ‘$1==”menuentry ” {print i++ ” : ” $2}’ /etc/grub2.cfg

# 0 – it’s from the awk command on the top. Kernel 4.11.2 = 0, and Kernel 3.10 = 1. When you want to revert back to the old kernel, you can change the value of the grub2-set-default command to 1.
sudo grub2-set-default 0

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

uname -msr
# uninstall the old kernel
rpm -qa | grep kernel

yum remove kernel-tools-3.10.0-693.el7.x86_64 kernel-tools-libs-3.10.0-693.el7.x86_64 kernel-devel-3.10.0-693.el7.x86_64 kernel-headers-3.10.0-693.el7.x86_64 kernel-3.10.0-693.el7.x86_64

# Install the new headers
yum –enablerepo=elrepo-kernel install kernel-lt-devel.x86_64 kernel-lt-headers.x86_64 kernel-lt-tools*

sudo reboot
# All Complete!

(912) 778-4296

  • 安装RealIP模块,在有CDN或多层反向代理的情况下,获取用户真实IP

基础架构

L1-Nginx(proxy)–>L2-Nginx(proxy)–>Nginx(Web)

增加realip模块

cd /opt/nginx-1.8.1
./configure --prefix=/app/nginx-1.8.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
make && make install

Server模块中配置

set_real_ip_from  10.0.0.0/24;
set_real_ip_from  192.168.0.0/24;
real_ip_header    X-Forwarded-For;
real_ip_recursive on;
  • set_real_ip_from:告诉nginx,192.168.0.109是我们的反向代服务器不是真实的用户IP
  • real_ip_header:告诉nginx真正的用户IP是存在X-Forwarded-For请求头中
  • 当real_ip_recursive为off时,nginx会把real_ip_header指定的HTTP头中的最后一个IP当成真实IP
  • 当real_ip_recursive为on时,nginx会把real_ip_header指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP

三种在CDN环境下获取用户IP方法总结

  • CDN自定义header头

优点:获取到最真实的用户IP地址,用户绝对不可能伪装IP
Ucloud为例/docs.ucloud.cn/storage_cdn/ucdn/faq.html
缺点:需要CDN厂商提供

  • 程序获取forwarded-for头

优点:可以获取到用户的IP地址
缺点:程序需要改动,以及用户IP有可能是伪装的

  • 使用realip获取

优点:程序不需要改动,直接使用remote_addr即可获取IP地址
缺点:ip地址有可能被伪装,而且需要知道所有CDN节点的ip地址或者ip段

217-402-9147

url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等

rewrite

语法

在配置文件的server块中写,如:

  • server {
  • rewrite 规则 定向路径 重写类型;
  • }
  • 规则:可以是字符串或者正则来表示想匹配的目标url
  • 定向路径:表示匹配到规则后要定向的路径,如果规则里有正则,则可以使用$index来表示正则里的捕获分组
  • 重写类型:
    • last :相当于Apache里德(L)标记,表示完成rewrite,浏览器地址栏URL地址不变
    • break;本条规则匹配完成后,终止匹配,不再匹配后面的规则,浏览器地址栏URL地址不变
    • redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
    • permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

简单例子

  • server {
  • # 访问 /last.html 的时候,页面内容重写到 /index.html 中
  • rewrite /last.html /index.html last;
  • # 访问 /break.html 的时候,页面内容重写到 /index.html 中,并停止后续的匹配
  • rewrite /break.html /index.html break;
  • # 访问 /redirect.html 的时候,页面直接302定向到 /index.html中
  • rewrite /redirect.html /index.html redirect;
  • # 访问 /permanent.html 的时候,页面直接301定向到 /index.html中
  • rewrite /permanent.html /index.html permanent;
  • # 把 /html/*.html => /post/*.html ,301定向
  • rewrite ^/html/(.+?).html$ /post/$1.html permanent;
  • # 把 /search/key => /search.html?keyword=key
  • rewrite ^/search\/([^\/]+?)(\/|$) /search.html?keyword=$1 permanent;
  • }

801-847-6176last和break的区别

因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解:

  • last一般写在server和if中,而break一般使用在location中
  • last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
  • break和last都能组织继续执行后面的rewrite指令

在location里一旦返回break则直接生效并停止后续的匹配location

  • server {
  • location / {
  • rewrite /last/ /q.html last;
  • rewrite /break/ /q.html break;
  • }
  • location = /q.html {
  • return 400;
  • }
  • }
  • 访问/last/时重写到/q.html,然后使用新的uri再匹配,正好匹配到locatoin = /q.html然后返回了400
  • 访问/break时重写到/q.html,由于返回了break,则直接停止了

if判断

只是上面的简单重写很多时候满足不了需求,比如需要判断当文件不存在时、当路径包含xx时等条件,则需要用到if

语法

  • if (表达式) {
  • }
  • 当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
  • 直接比较变量和内容时,使用=或!=
  • ~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配

一些内置的条件判断:

  • -f和!-f用来判断是否存在文件
  • -d和!-d用来判断是否存在目录
  • -e和!-e用来判断是否存在文件或目录
  • -x和!-x用来判断文件是否可执行

bought note内置的全局变量

  • $args :这个变量等于请求行中的参数,同$query_string
  • $content_length : 请求头中的Content-length字段。
  • $content_type : 请求头中的Content-Type字段。
  • $document_root : 当前请求在root指令中指定的值。
  • $host : 请求主机头字段,否则为服务器名称。
  • $http_user_agent : 客户端agent信息
  • $http_cookie : 客户端cookie信息
  • $limit_rate : 这个变量可以限制连接速率。
  • $request_method : 客户端请求的动作,通常为GET或POST。
  • $remote_addr : 客户端的IP地址。
  • $remote_port : 客户端的端口。
  • $remote_user : 已经经过Auth Basic Module验证的用户名。
  • $request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
  • $scheme : HTTP方法(如http,https)。
  • $server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
  • $server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
  • $server_name : 服务器名称。
  • $server_port : 请求到达服务器的端口号。
  • $request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
  • $uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
  • $document_uri : 与$uri相同。
gams

如:

  • 访问链接是:/localhost:88/test1/test2/test.php
  • 网站路径是:/var/www/html
  • $host:localhost
  • $server_port:88
  • $request_uri:/localhost:88/test1/test2/test.php
  • $document_uri:/test1/test2/test.php
  • $document_root:/var/www/html
  • $request_filename:/var/www/html/test1/test2/test.php
stylus

prespecialist例子

  • # 如果文件不存在则返回400
  • if (!-f $request_filename) {
  • return 400;
  • }
  • # 如果host不是xuexb.com,则301到xuexb.com中
  • if ( $host != ‘xuexb.com’ ){
  • rewrite ^/(.*)$ /xuexb.com/$1 permanent;
  • }
  • # 如果请求类型不是POST则返回405
  • if ($request_method = POST) {
  • return 405;
  • }
  • # 如果参数中有 a=1 则301到指定域名
  • if ($args ~ a=1) {
  • rewrite ^ /example.com/ permanent;
  • }

在某种场景下可结合location规则来使用,如:

  • # 访问 /test.html 时
  • location = /test.html {
  • # 默认值为xiaowu
  • set $name xiaowu;
  • # 如果参数中有 name=xx 则使用该值
  • if ($args ~* name=(\w+?)(&|$)) {
  • set $name $1;
  • }
  • # 301
  • rewrite ^ /$name.html permanent;
  • }

上面表示:

  • /test.html => /xiaowu.html
  • /test.html?name=ok => /ok.html?name=ok

location

语法

在server块中使用,如:

  • server {
  • location 表达式 {
  • }
  • }

location表达式类型

  • 如果直接写一个路径,则匹配该路径下的
  • ~ 表示执行一个正则匹配,区分大小写
  • ~* 表示执行一个正则匹配,不区分大小写
  • ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
  • = 进行普通字符精确匹配。也就是完全匹配。

优先级

  1. 等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
  2. ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
  3. 正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
  4. 常规字符串匹配类型。按前缀匹配。

例子 – 假地址掩饰真地址

  • server {
  • # 用 xxoo_admin 来掩饰 admin
  • location / {
  • # 使用break拿一旦匹配成功则忽略后续location
  • rewrite /xxoo_admin /admin break;
  • }
  • # 访问真实地址直接报没权限
  • location /admin {
  • return 403;
  • }
  • }
nginx

link

测试汉字转拼音

0x01 关于 nginx

1
2
3
4
5
配置灵活,简单,运行时占用系统资源较少,功能模块繁多,可扩展性极强,基于 C ,整个工具大小1M左右
支持高并发,仅限于全部为纯静态文件的情况下,因为最终还要取决于后端 [ 脚本和数据库 ] 的实际处理速度
默认 nginx 会自动选择最佳的网络I/O模型,和nginx不同的是,apache默认就会使用select模型,效率较低
上面这些话的意思也就是说,你的C要牛逼到一定的程度,不然,想做深度二次开发基本是扯淡,真心挺佩服毛子的
更多说明,请直接参考官方文档…

0x02 正确理解 linux 对文件,目录,[ 读 写 执行 ] 权限的真正含义,这东西不能靠干说,因为根本理解不扎实,大家可以自己在系统中创建两个普通用户,不停地切换目录文件权限,以深入仔细体会,后面网站目录权限设置要用到这些基础,如果连这些都搞不清,想灵活应用就难了,耐心点,等透彻理解之后,你就会发现真TM简单

8083686174

这是一篇 Kubernetes 的概览。

Kubernetes 是一个8035527214。

使用 Kubernetes,你可以快速、高效地满足用户以下的需求:

  • 快速精准地部署应用程序
  • 即时伸缩你的应用程序
  • 无缝展现新特征
  • 限制硬件用量仅为所需资源

我们的目标是培育一个工具和组件的生态系统,以减缓在公有云或私有云中运行的程序的压力。

Kubernetes 的优势

  • 可移动: 公有云、私有云、混合云、多态云
  • 可扩展: 模块化、插件化、可挂载、可组合
  • 自修复: 自动部署、自动重启、自动复制、自动伸缩