目录
1. 创建 nginx 文件
2. 环境准备
3.下载 tengine 安装包,
4.文件解压缩
5. 系统测试和软件安装配置
6.编译 安装
安装的问题
7.修改配置文件:
7.1:nginx worker进程所有者
7.2:连接数量,文件描述符配置
7.3;日志格式
7.4;零拷贝
7.5:是否立即执行请求
7.6: 保持连接的超时时间
7.7:压缩
7.8: server
7.9: location
7.10: 基于反向代理的负载均衡
7.11:http 和 https
8: 加载配置文件
9. session不同步
10. http协议
10.1 uri : 客户端浏览器支持的大概是2000个字节,0.25kb
10.2 请求头 : 几十k~几百M(客户端)
10.3 请求体(nginx,默认是 1M)
nginx
CPU 有几个内核 nginx 可以启动几个进程
1. 创建 nginx 文件
/etc/init.d 下新建一个 nginx 文件,文件内容,从网上查找
给 nginx 文件赋予可执行权限
server nginx start 可以正常的启动nginx 服务
chkconfig: - 85 15
- : 表示启动级别1-5,默认都是off,可以用具体的数字来指定,例如:345
85 15 : 表示启动和关闭系统时该服务的优先级
2. 环境准备
3.下载 tengine 安装包,
tengine 是淘宝对nginx 进行包装后的产物,相对来说比nginx 的负载更多
官方下载地址: http://tengine.taobao.org/download.html
4.文件解压缩
tar -xvzf xxxxxxxx.tar.gz
5. 系统测试和软件安装配置
./configure 进行系统测试
--prefix=/opt/yang_zzu/nginx 安装配置
6.编译 安装
make && make install
-------------------------------------------------------------------------------
安装的问题
首先要保证 httpd 服务没有开启,即,访问 80 端口无法访问。
nginx 使用的也是 80 端口,所以要先停止 httpd 服务。
这个是 tnginx 官方安装文档,感觉作用不是很大
http://tengine.taobao.org/documentation_cn.html
nginx官方安装文档,按照这个安装,可以正常的运行,但是操作比较麻烦,不能直接将服务进行重启,或者停止
http://tengine.taobao.org/nginx_docs/cn/docs/install.html
解压后直接使用这条命令进行安装
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid
./configure
--sbin-path=/usr/local/nginx/nginx 设置nginx可执行文件的完整路径
--conf-path=/usr/local/nginx/nginx.conf 设置配置文件nginx.conf
的完整路径
--pid-path=/usr/local/nginx/nginx.pid
tnginx被安装在 /usr/local/nginx 目录下
通过在网上创建 /etc/init.d/nginx 文件,使用 service nginx start 也是无法进行启动操作。
--------------------------------------------------------------------------------
7.修改配置文件:
配置文件的地址为 :--prefix=/opt/yang_zzu/nginx
nginx 是模块化的软件,支持热部署,热加载,热升级
worker 进行用来处理连接,如果配置文件修改了,由worker的父进程master 读取新的配置 ,再创建一个worker进程,由新的worker 进程接收新的进程,老的 worker 进程将之前所有的连接请求处理完之后销毁该进程。
7.1:nginx worker进程所有者
worker 进程,需要手动指定进程的创建人,防止nginx 被入侵后拿到该进程用户的所有权限进行其他操作。
7.2:连接数量,文件描述符配置
系统1G 内存的机器上可以打开的文件数大约是10万
一个进程的文件描述符也有约束
修改系统进程一个进程的文件描述符的个数
ulimit -SHn 4096
客户端最大的连接数量:
max_clients = worker_processes * worker_connections / 4
客户端在进行连接的时候,会创建一个文件描述符,在使用事件的时候,会有个事件描述符
nginx 在进行反向代理的时候,客户端会和 nginx 服务器进行两个文件描述符的创建,nginx 服务器又会和 server 服务器进行两个文件描述符创建
所以这里要 除以 4
7.3;日志格式
7.4;零拷贝
sendfile on 开启零拷贝
指计算机在网络上发送文件时,不需 要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space )中传输到网络的方式
减少用户态和内核态的切换,
正常的请求流程,连个 i/o 操作,两次用户态内核态切换
sendfile 零拷贝, 一次内核态用户态切换
7.5:是否立即执行请求
tcp_nopush on; 开启后请求不会立即的执行,而是等到tcp缓冲满了之后,再发送(针对惊天文件)
7.6: 保持连接的超时时间
keepalive_timeout 65; 保持连接的超时时间
7.7:压缩
gzip on; 开启压缩,如果传输的是大的文本数据,建议开启压缩
7.8: server
-- 虚拟服务器1
server {
listen 80;
server_name www.yang.com;
location / {
root /mnt; 绝对路径,根目录下的 /mnt
autoindex on; 自动索引
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
-- 虚拟服务器2
server {
listen 80;
server_name www.yang_zzu.com;
location / {
root html; 相对路径,相对于安装路径
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
7.9: location
一个 server 里面存在很多的location
官方文档: http://tengine.taobao.org/nginx_docs/cn/docs/
location 在进行匹配的时候,使用的是 “最大前缀匹配“ 和 “绝对匹配”
普通location, 是要全部进行一次匹配操作,找出匹配度最高的一个
正则location,只要匹配到第一个就停止后面的匹配
www.baidu.com/index/abc/110.index ---URL 请求
在进行动态代理的时候,
普通匹配,动态代理的地址后面可以跟有路径地址,
1. 动态代理的地址后面有 uri
匹配成功的字符串会被删除掉,然后将剩余的内容拼接到动态代理的路径后面
2. 动态代理的地址后面没有 uri
匹配成功后,会直接将 uri 拼接到 动态代理的地址后面
正则匹配,动态代理的地址后面不能跟有路径地址,
server {
listen 80;
server_name www.yang_zzu.com;
location / {
root html; 相对路径,相对于安装路径
index index.html index.htm;
}
-- 访问的地址 www.yang_zzu.com/abc.go
-- 动态代理的访问地址为 http://192.168.232.100/efg/index.html;
location /abc.go {
proxy_pass http://192.168.232.100/efg/index.html;
}
-- 访问的地址为 www.yang_zzu.com/aaa.go/ccc.html
-- 动态代理的结果为:http://192.168.232.100/bbb/ccc.html
location /aaa.go {
proxy_pass http://192.168.232.100/bbb;
}
-- 访问的地址为 www.yang_zzu.com/bbb.go/bbb.html
-- 动态代理的结果为:http://192.168.232.100/bbb.go/bbb.html
location /bbb.go {
proxy_pass http://192.168.232.100;
}
-- 访问的地址为 www.yang_zzu.com/aaa/bbb/ccc/ddd.go
-- 正则匹配的时候,动态代理的地址不能带有路径
-- 动态代理的访问地址为:http://192.168.232.100
location ~* \.go$ {
proxy_pass http://192.168.232.100;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
7.10: 基于反向代理的负载均衡
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
-- 试验时,将超时连接设置为 0
#keepalive_timeout 0;
-- 在进行试验的时候,将保持超时连接注释掉,这样才能看到负载均衡的结果
#keepalive_timeout 65;
#gzip on;
-- 负载均衡 ,集群服务器,bula 集群名称
-- 可以设置每个服务器的权重 server 192.168.183.150:8080 weight=1;
upstream bula{
server 192.168.232.100;
server 192.168.232.101;
server 192.168.232.102;
server 192.168.232.103;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
-- 基于负载均衡的动态代理,代理的ip为负载均衡的集群服务器
location /aaa.go {
proxy_pass http://bula/bbb;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
7.11:http 和 https
如果使用http://www.baidu.com/ 进行动态代理,则地址栏中的显示的请求地址为 www.baidu.com
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
-- 访问 www.yang_zzu.com/aaa.go
-- 动态代理的地址为 https://www.baidu.com/
-- 使用 https 请求,地址栏中显示的请求地址还是www.yang_zzu.com/aaa.go
-- 显示的内容是百度主页
location /aaa.go {
proxy_pass https://www.baidu.com/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
添加默认网关,否则不识别动态代理的 www.baidu.com 这个地址
8: 加载配置文件
service nginx reload 重新加载配置文件资源
9. session不同步
负载均衡的时候,server服务器中 session 中的内容不同步,
在进行动态代理的时候会导致不同的服务器响应,服务器1里面没有session 信息进行一次登录,服务器2里面没有session 信息又进行一次登录。
重现步骤;
1. 安装tomcat
2. 修改webapps/ROOT 目录下的 index.jsp
from 192.168.232.100<br>session=<%=session.getId()%>
3.将 tomcat 分发到其他节点进行相同的配置
4.启动 tomcat
session 存储可以是redis, memcached 等
1.在做 seesion 存储的那台服务器上安装 memcached
2. 修改tomcat 配置文件 /conf/context.xml
10. http协议
10.1 uri : 客户端浏览器支持的大概是2000个字节,0.25kb
请求地址: ip + 端口 + uri
10.2 请求头 : 几十k~几百M(客户端)
请求头,一般情况下,也不用专门的去进行设置
1.正常的配置 server 外面进行配置(一般使用这个就可以了)
client_header_buffer_size 256k;
large_client_header_buffers 4 256k;
client_header_timeout (可以设定超时时间,一般情况下也不用手动设置)
2.server 里面进行配置(不建议使用这种,比较绕)
nginx在处理header时实际分配的buffer大小,是解析conf后,default_server中的最终值。
这个时候,large_client_header_buffers 的大小为 1M
10.3 请求体(nginx,默认是 1M)
client_max_body_size 100m;
client_body_timeout 设置超时时间(如果不是惊天大文件,一般不用进行设置)