nginx服务器配置

nginx = ngin +x , engine x : ngin 前后四个, n,

  1. 有两个配置文件: /etc/nignx/nginx.conf 全局配置文件, nginx/sites_availbe/default配置文件, 是用来配置站点使用 php等应用的...

  2. 在配置 自定义编译安装软件的时候,
    ./configure 命令的选项
    --with-http_stub_status_module: 使用with的时候, 表示的是启用 某个特征功能, with和后面的单词用 横线连接, 而后面的单词要用下划线书写, 通常with 后不需要写等号和内容
    --prefix=..., 和 --user=... 等, 不是由with引导的选项, 要写等号和内容.

  3. pcre: 跑车热, pc, re: 热, 表示的是perl兼容正则表达式. 如果你不需要使用正则表达式, 你可以不安装pcre, 但是由于httpd 或 nginx要 进行 地址重写rewrite的时候, 就需要正则表达式模块;
    而zlib和 zlib-devel 是用来 提供 压缩和 解压缩的函数和 类 及 数据结构等.
    而nginx 和 httpd 的编译安装和配置 跟 httpd差不多.

  4. ./configure --with-prce --prefix=/usr/local/nginx --user=www 等等

  5. 为什么要使用代理服务器和反向代理服务器?
    因为如果你的机器直接向目标服务器发送请求, 你的请求可能会被fw给拒绝. 如果向代理服务器发送请求,由代理服务器代替你发送请求并返回你的请求结果.
    代理服务器的目的是让 内网机器 访问 外网的服务器;
    而反向代理服务器 是当外网 机器访问 内网的 服务器时, 为了保护 内网的 内容服务器 的安全, 可以让外网机器 先访问 反向代理服务器, 然后让 反向代理服务器来向 内网的内容服务器发送请求...

nginx可以做web服务器, 反向代理服务器, 或邮件服务器. 因为nignx的内存占用少, 并发能力很高.


  1. linux 中的nobody 用户?
    是linux中的内建用户, 如同win在安装一些系统软件的时候,会自动创建一些内置用户一样.
    nobody是系统内置的用户, 主要是一些系统服务软件比如nignx, httpd, vsftp等的默认的客户端登录用户一样
    , 他是无法登录的.类似于win中的匿名账户anonymous一样
    nobody的id号是 99

/usr/sbin/nologin: 是一个命令, 表示"不能登录"通常是一些内置用户才会使用这个shell进行登录.

  1. poll是"选举,投票,民意测验"等, 在linux内部编程的时候, 表示的是io事件队列.
    最开始使用的是select,然后是poll, 然后是 epoll, 它是linux内部网络编程时比如httpd, nignx等网络编程时的 系统调用函数
    比如: int epoll(struct epoll*(), struct * epollfd...)
    包括 #include <epoll.h>, epoll包括三个部分, epoll.create, epoll.ctl, epoll.wait等

  2. 用0~9来表示10个预定义的句柄, 0: 表示标准输入.. . 而要在重定向中, 引用 某个句柄的时候, 则要使用 & 表示 引用. 而且这个句柄的 重定向命令可以直接放在 前面的命令后面. 比如:
    ls a_dir 2>&1

  3. 重定向和管道的区别?
    管道是表示 连接的 前后 两个命令 | 前后必须都是命令, 表示前一个命令的输出, 作为 下一个命令 的输入.
    而重定向后面是一个文件, 不是命令, 表示命令的输出结果到某个文件, 或表示命令的来源是某个文件. 重定向关联的是 文件,不是命令.

dup和dup2函数, 是linux内部编程要使用的 系统调用函数, 包含在 unistd.h 即除了 c的标准头文件外, 还有unix自身使用的头文件.是将一个文件描述符复制成另一个数值.

在很多系统中, 比如这里的fedora23中, useradd和 adduser的用法 和使用结果 完全 是一样的. 完全不必区分这两个命令.


script:
typescript: 打字稿, 用打字完成的稿子.
script会将shell session的结果全部记录下来, 输入在 默认的 typescript文件中.

在某些命令的 "帮助"信息, 不是 output信息时, 要将这些 假的 控制台输出信息, 重定向到一个文件中, 使用重定向 >, >> 无法实现, 这时, 要使用 script:

script: -a 是表示将信息append到一个文件中, 默认的文件名是 typescript, 也可以指定文件名 -a foo.spt
-t 表示记录时间time信息, 默认的是将 时序信息记录到 错误error句柄, 所以需要重定向: -t 2>time.info


通常 在linux中的 目录后 加斜杠和 不加 斜杠, 通常来说是没有什么区别的, 只是在一些特别的地方有区别: 比如在seo中, 在http访问中, 通常要加上斜杠, 通常如果要访问的是目录本身, 则不加斜杠, 而要访问的是目录中的内容, 则要加上斜杠!


通常安装一些服务程序的时候, 需要 pcre, zlib, openssl等, 一般这些常见的核心功能的包, 都是安装了的. 只是 他们的 开发包一般是没有被安装的, 比如: openssl-open, zlib-devel的包. 要查看这些包(程序)是否被安装, 只需要用 rpm 进行查看就好了, 比如 rpm -aq | grep 'openssl-devel' 要是严格的整个单词进行匹配的话 , 使用 -w选项: grep -w ....

gcc, gcc-c++ , gcc的库包: libgcc等通常也是被安装的

注意的是, grep为了查询的方便, 默认的情况下, 被查找的内容是不区分是否是完整的单词的, 如果要 严格地区分/匹配单词的话, 就使用 -w选项.

通常, 开源软件的 网址都是以org为结尾的, 少数的是以net结尾的 :比如 nginx.org , zlib.org -> zlib.net , pcre.org

nginx等软件的mainline版本, 和stable版本, legacy版本的区别

mainline是"主力, 主线"版本, 是当前正在做的, 正在开发的版本, 相当于开发版
stable是最新的稳定版, 建议在生成环境中使用部署
legacy是以前的 稳定的老版本.


对于自己创建的目录而言, 我们以前总是习惯于一级目录一级目录的切换进入, 而事实上是可以一次性的进入多级深目录的.

### 在使用 su -c 命令的时候, 为了使用的方便, 如果在命令中, 使用了"相对路径"或 "相对路径下的文件名", 那么这个相对路径 是正对 当前 路径而言的, 而不是 针对 root/ 超级用户的路径而言的 想想也是, 如果相对于 su 来说, 如果认为 su -c '....' 后面的命令中的路径就是相对于super user而言的, 那么究竟是相对于 su的哪个 路径而言的呢? 所以, 很显然, 这个su -c 后面的命令中的 路径 都是相对于 当前 路径 pwd 而言的. 比如:
[foo@localhost b]$ su -c 'cp ab /opt'
Password: 
[foo@localhost b]$ pwd
/home/foo/Downloads/a/b
那么 上面的那条 命令 就是将 当前 的 a/b路径下的 ab文件 拷贝到 /opt中


关于linux下文档的命名技巧, 最好是用 英文字母开头, 中间可以有包含汉字. 这样在使用 自动补全的时候, 可以只通过输入英文字母就可以补全 搜索到了

好像, 在vim中进行设置的 命令, 都是以set开头的, 还没有 不是 以set开头的命令, 除了map映射.

1 mvc不是哪一个框架所臆想出来的, 而是通过总结网站的结构, 开发过程而提出的规律.因为网站
的业务逻辑是通过后台即controller控制器来实现的, 它只有一个目的和作用, 就是: 获得变量
或数据的值, 得到通过业务逻辑的过程的数据.
2 视图view, 实际上就是模板, 也就是传统开发中的前台页面, 只不过不是用html结尾的, 而是用
tpl结尾的. 他就是用来表现/显示数据的. 就是把后台的业务逻辑数据 (通过 传递参数的方式, 以动态变量的 方式传递到前端页面),
然后, 前端页面/ 网页中, 在 关键 位置, 把 后台 传递 过来的 参数 /变量 嵌入 页面 中 显示出来. 你可以通过不同的方式/样式来呈现, 这个不同的样式就是css,
它只是对数据的装饰打扮一样. 而数据本身其实还是那一个/同一个.
3
4 模块module就是数据库, 无论是前台还是后台的基石都是数据库, 数据都是存储在数据库中的
5

FQDN: fully qualified domain name. 完全限定域名, 全称域名, 全程域名, 全域名, 是 主机名+域名. 是主机名的完整表示, 表示了主机在整个域名树中的位置.
qualify: v. 使...有资格, 使合格; 限定, 限制. fqdn: 就是完全限制域名, 就是说这个主机名通过域名就完全限定了. 是唯一确定的了.

要修改主机名? 设置/修改本地机器的域名?
三种方法:

  1. hostname: 临时型的修改, 修改后在每个地方包括另起一个terminal, 也能看到新修改的hostname. 但是 重启后失效.
  2. 在/etc/sysconfig/network中, 添加: hostname="..." networking=yes... 这个要重启后永久生效
  3. 要添加本机在本地的 域名: 可以在 /etc/hosts文件中, 直接添加你要设置的本地机器的 域名, 比如: echo '127.0.0.1 foo.bar.com' >> /etc/hosts 这时候,访问你添加的本地域名就能即时生效
  4. 要求主机名要简单易记, 而且要有实际意义. 如同变量名的命名一样

为什么有时候php页面中不能使用 ROOT_PATH, 而要直接使用 dirname(FILE)?

其实, ROOT_PATH本身就是用 define('ROOT_PATH', dirname(__FILE__)) ; 来定义的. dirname是php语言本身所提供的一个函数, 给出当前文件所在的 绝对路径字符串.
如果在某些页面中, 不能使用这个路径, 可能是因为 定义 ROOT_PATH的文件 没有被 包含到? 这时你就只好直接些dirname了.

其实, 在tp开发中, 为了表示 某个文件的路径,(是绝对路径) 有多种方法 , 你可以直接写dirname... 只是这种写法看起来不"高大上"(其实是一样的), 如果用 预先定义好的路径常量, 可能看起来 1. 要简洁些, 2. 要更明确些, 一看就知道其 "语义" , 比如 APP_PATH, ROOT_PATH

在任何一种编程语言中, 什么时候, 要加引号?

都是一样的 : 对于一个 字符序列, 只有可能是三种情况: 一是变量, 二是常量, 三是 字符串; 所以, 如果你不能说出它是 变量名, 也说不出是常量, 那么它就只能是 字符串了. 既然是字符串, 那就该用 单引号了!

什么叫 可变的, 依据条件来变化/确定的css样式?

并不是指 css名称可以变化, 在定义 css的样式的时候, 它必须是确定的.
所谓css 随外在条件的变化而不同, 是指: 在 模板文件中, 我们可以在 if结构中, 根据外在条件, 来指定 class 类的名字 . 也就是说, 如果条件不同, class类的名字就不同, 或者class类的名字 是一个 变量 字符串...


  1. aria: [a:ri2], 咏叹调, 就是关于 阅读, 关于 障碍人士的阅读辅助器, 实际上就是 "关于障碍人士的 无障碍阅读" 提供支持, 要求达到dot(无障碍阅读/department of transportation)网站才能上线. 比如: aria-label, aria-hidden等属性. 这些属性基本上是没有什么作用的, 像国外的一些框架如bootstrap等用得比较多.

  1. 正则表达式中的括号有两个作用, 一个是分组便于后面的反向引用;二是便于理解和查看, 这时即使没有反向引用也可以这样做
    正则中的点号, 表示 除了 回车符之外的 任意字符
    因此, 要表示 点号本身, 就需要用 转义: 反斜杠 .

  2. nginx和apache都支持rewrite, 首先都需要安装 pcre包, 因为这个正则包提供了rewrite地址重写的正则匹配功能, 比如: ~, ~, !~ , !~
    rewrite的设置包括:
    set 设置变量
    if 根据条件满足时确定 正则重写功能, 条件运算符包括: =, !=, ~ (正则匹配)等
    return 返回
    rewrite: rewrite语句的格式包括: 正则表达式 替换地址 标志
    其中, 标志有四种:
    break, 表示替换后的地址是最终地址了, 不再进行正则检查
    last,表示替换后的地址是最后地址,但是还可以继续进行正则替换
    redirect, 表示临时性的重定向302
    permanent, 表示永久性的重定向301
    rewrite的重写有一个特点,是可以进行重复、递归的正则替换检查和重写, 即正则后的地址还可以进行正则替换

301和302重定向主要是针对搜索引擎,爬虫,seo网站优化和排名等
搜索引擎通常对302(临时性)重定向不友好, 302重定向被认为是k站,黑帽优化,会影响网站的排名;
规范化的重定向,是发生在 网站域名发生变化/更改的场合,使用301重定向,搜索引擎会把原网站的权重、排名等统统转移到新的域名。

  1. linux系统这一些常用的工具包,比如libxml, libxml2等, 这些包通常是 用C语言写的, 用来提供了一些操作xml文档(中的节点等 xpath等)、档案的函数、 类、 和数据类型等。
    这些基础的通用包, 往往被很多应用软件如php, apache,nginx等所依赖。

  2. linux中配置文件的格式, [key] symbol [value] 其中的symbol有多种方式, 有的是用空格, 有的是用等号,有的是用冒号, 有的是用大括号, 主要是看你的解释器的写法。

有三个地方修改、配置你的本地机器的域名:
hostname,
/etc/sysconfig/network
/etc/hosts


  1. 要想做到网页内容可以管理和控制, 那么在写代码的时候, 就要做到每一部分的内容, 你都能够说得出来,比如是描述,是缩略图,是标题等等, 而不是自己随心所欲的写,因为网页上的一切, 除了固定的、静态的、不变的部分,其他一切都要用数据库来存储和管理。
    前端页面的内容, 要做到 模块化, 分段化, 然后每个item要做到 语义化, 结构化

前后台的设计, 都是基于数据库的, 后台的内容模块包括:

后台设计,实际上很大一部分工作, 就是把对数据、数据库的操作 可视化了 而已,即比如创建表,增加字段等操作,从数据库的操作界面移动到 网页上来了。 当然这个一个方面是 为了后台数据库的安全,(不能让人轻易地随便的直接操作数据库, 通过表单的方式可以对将要进入数据库的数据进行安全预处理), 另一方面,在网站建设好之后,交给客户使用时很多客户并不知道这些知识, 所以只好用可视化的方式来管理。

  • 一个模块的增加页面, 实际上就是在数据库中创建一个表。

  • 表中的 字段 的 增加详情表单, 类似于数据库可视化管理工具(如phpmyadmin中的字段增加页面表单)

  • 最后, 表创建好了, 字段增加好了, 你要把这些字段的详情 用一个表格列出来, 同时在这个表格中, 你应该有对 每个表、每个字段的可以操作的(如编辑、删除等)button链接

  • 后台管理系统中, 还应该有关于前台 页面的 生成方式, 以及一些图片的上传 处理、规定表单等。

实际上, 很多的 前端js ui插件,组件,在后台管理系统中用得是比较多的, 比如表单, 比如标签页组,比如左边导航栏的折叠组件等.


在配置 nginx反向代理服务器 :  proxy_pass 127.0.0.1 ... 时, 通常只需加密 从客户端到代理服务器 这一段的内容,使用ssl(或openssl协议)采用https 访问, 而从代理服务器到内网的内容服务器, 可以不用加密不使用ssl, 这样不会损害性能performance(表现)。


如果使用的是 x86_64位的chrome安装包rpm, 也就需要64位的 c++和库: libstdc++.so(64bits)...
chromium是开源的,而chrome则不是开源的.
chromium是开发版,是试水的, 几个小时就有新版本出现? 金丝雀版->dev版->beta版->stable版.


Rlogin: remote login, 是unix系统上的主机之间的 远程登录.所以在linux和win上比较少见
如果你在安装linux/unix等系统的机器 跟前 通过控制台进行登录, 叫本地登录. 其实都没有必要,可以通过 网络, 实现远程登录. 远程登录的还是 机器的 shell, 控制台.
ssh: 是 secure shell 安全的shell壳 安全的终端.
ssh跟telnet和rlogin相比, 两个优点, 一个是它是对 用户名和密码进行了加密的,不像telnet和rlogin是明文, 可能会被截获产生dns欺骗和ip欺骗. 第二他对终端传输的数据内容进行了压缩和解压缩.

putty: [pati],或读[puti].
linux服务器本身通常都开启了ssh server 服务.
而终端只要有ssh的终端软件, 通过ssh协议都可以登录到服务器的shell上. 这种ssh client软件很多. 像 linux(自己就自带ssh客户端, 直接用 ssh linux_server_ip就可以了), xshell, putty, secureCRT等.而且这些软件通常 还不只是 只支持 ssh协议, 还包括支持 telnet, rlogin, serial等 远程登录协议.


ecs: elastic compute service: 可伸缩计算服务. 就是web server服务. 云服务器所使用的操作系统可能在不同的时期不同的地区都有所不同,比如有debian, centos等
开源不等于免费, 虽然都是free.
开源是为了保证代码的质量 "要多少双眼睛才能驯服复杂性?"
而收费主要是针对 企业用户的 服务.

如果考虑后期使用 国内的云服务器, 还是要在 centos上布置, 主要是6.x和7.x的版本, 现在用得最多的还是6.5的版本! 因为现在的云你用最低配置的话, 大概是 1核, 1~2GB的内存, 1~2M的带宽,所以用 centos7(只有64位的, 适用于独立的大内存的主机)并没有优势. 同时64位的系统安装32位的软件可能还是存在些问题.

连贯, 一致. cohere [k2u' hi2]: 前后连贯, 前后一致, 粘接... n. co'herence: the varous elements of the novel fail to cohere. has a surprising sense of coherence.

livecd livedvd bindvd的各版本的区别?
bin-dvd是硬盘安装版, 必须要安装到硬盘主机上才能使用; live是活的, 现场直播的, 是刻在光盘上的, 可以直接从光盘上启动, 免安装的. livecd和livedvd的区别只是前者的体积更小, 更易于维护

**下载centos的地方很多: **
比如: www.centoscn.com/centosSoft/isos, 这个中文站
mirrors.163.com 国内的开源镜像站
vault.centos.org centos的保鲜库就是存放以往版本的
iso是镜像, ios是操作系统.
比如 http://vault.centos.org/6.5/isos/i386/

而这些centos的保险柜为了 下载分压, 都是保持在 kernel.org的主机上的. kernel.org是linux开源组织 组件的一个 存储/管理内核的一个组织. 他的主机是: archive.kernel.org/centos-vault/

linux中的包的命名: 用点号来连接各个单词, 如果一个单词由多个部分组成, 中间用横线- 来连接, 比如: centos-6.5-i386-bin-dvd1.iso

centos/rhel的生命周期(即厂家服务支持, 安全更新等)是7年, 甚至可以延长到10年. 而其他ubun server /deb等好像是 18个月, 而且硬件驱动兼容性好(各个主流硬件厂家早就将硬件送到centos, redhat去测试了), 软件也比较多, 没有洁癖, 可以安装/包含非开源软件...

为什么要采用 单颗多核而少用 多颗单核的cpu呢?

可能在设计和实现的时候, 主要有几个考虑

  1. 是如果设计多颗单核的cpu, 那么每一颗cpu都需要供电 电路 \与主板总线的连接 线路, 这样在主板的尺寸更大, 使用的元件更多, 在排线布线的布局上困难更大.
  2. 更重要的是, 在提供同样 的计算能力上, 单颗多核的cpu比多颗单核的cpu更高效: 比如现代软件经常要进行的 多线程运行, 如果是后者, 则各个线程只能在分散的 多个cpu上运行, 各个线程之间要交换数据只能通过cpu外部的总线进行交换, 而如果是单颗多核cpu, 各个线程都是在同一cpu内部运行, 数据交换在同一个cpu内部进行, 这样交换数据的速度就远远比通过外部总线的速度更快;
    二是, 各个线程之间共享数据的问题, 单颗多核能够很好地共享数据, 共享单颗cpu的cache. 但是如果是多颗cpu的话, 共享cache的话, 就难以保证各个cache之间的 数据的 一致 coherence.
    所以 现在的cpu体系多是 单颗多核的.
    参考知乎上的: 这段话:

架构可以千变万化,面向需求、综合考量是王道。来,简单举个例子。假设现在我们要设计一台计算机的处理器部分的架构。现在摆在我们面前的有两种选择,多个单核CPU和单个多核CPU。如果我们选择多个单核CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个独立的CPU上,线程间的所有协作都要走总线,而共享的数据更是有可能要在好几个Cache里同时存在。这样的话,总线开销相比较而言是很大的,怎么办?那么多Cache,即使我们不心疼存储能力的浪费,一致性怎么保证?如果真正做出来,还要在主板上占多块地盘,给布局布线带来更大的挑战,怎么搞定?如果我们选择多核单CPU,那么我们只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。在这样的架构上,如果我们跑一个多线程的程序,那么线程间通信将比上一种情形更快。如果最终实现出来,对板上空间的占用较小,布局布线的压力也较小。看起来,多核单CPU完胜嘛。可是,如果需要同时跑多个大程序怎么办?假设俩大程序,每一个程序都好多线程还几乎用满cache,它们分时使用CPU,那在程序间切换的时候,光指令和数据的替换就要费多大事情啊!所以呢,大部分一般咱们使用的电脑,都是单CPU多核的,比如我们配的Dell T3600,有一颗Intel Xeon E5-1650,6核,虚拟为12个逻辑核心。少部分高端人士需要更强的多任务并发能力,就会搞一个多颗多核CPU的机子,Mac Pro就可以有两颗


单颗多核和多颗单核:   就像你要去公司上班而不是在家里上班一样。去公司上班(多核CPU)的话,资源共享(共享缓存),沟通方便(CPU内数据传输速度远大于总线速度)。
除非信息技术(类比总线)上有突破性进展,否则我们还是每天要挤公车去公司上班(多CPU方案无法取代多核



在新的版本中, 使用了应用分组.
以前是使用多个 应用程序, 平级的, 比如最常见的两个独立的应用程序, 前台和后台, Home和Admin.它们是平

级的, 且目录跟tp是在同一个地方.

而现在分组后, Home和Admin是作为 一个大的/总的应用程序 App下的两个应用分组,是两个目录. 而App跟

ThinkPHP是平级的.


NetSarang公司提供安全的 连接解决方案. 主要包括: xshell5, xftp5, xlpd5, xmanager5 都是连接的客户端软件.
为什么xmanager没有自带xftp? **实际上, xftp等跟xshell是独立的软件, 需要独立的下载和安装. 但是他们的操作界面(包括菜单/工具栏/设置等都基本上是一样的) **
它只是带了 xbrowser, xconfig等, 再xbrowser中可以管理xshell和xftp。

阿里云申请?
idc: internet data center: 网络数据中心, 通常是一些


hacker: 黑客 cracker: 骇客

/etc/services文件的作用是 表述了/规定了 系统中的服务名称 和它们使用的端口号 和 协议 之间的 对应关系.这个文件可以被其他应用程序所读取并使用,比如 获取某个端口所正在使用的服务名称, 或者使用服务名称来代替端口号,更容易记忆. 也要求/推荐/建议 自开发的服务程序, 在这个文件中 写上自己的服务名称和端口号之间的对应关系. 这样便于管理.

格式是: service-name port/protocol [aliases...] [ ## comments]

posted @ 2017-12-29 10:55  noitanym  阅读(495)  评论(0编辑  收藏  举报