nginx开源的,是一款高性能轻量级的web服务软件。稳定性高,而且版本迭代比较快(修复bug的速度比较快,安全快) 消耗系统资源很低,http的请求,并发连接,单台服务器可以支持3万-5万的并发请求。(前提系统资源全部分配给nginx使用)
单个节点nginx一般支持2万个并发
1、并发量不会那么高
2、资源需要分配给其他程序运行
3、有分布式集群分担,不需要支持那么多并发
1、静态文件服务:静态页面,可以直接提供静态文件服务,html css jsp 处理静态页面的响应速度很快,效率也很好。
2、代理功能:正向代理,反向代理。可以实现负载均衡,高可用和故障转移
3、动态内容处理:nginx并不能直接的处理动态请求,可以通过中间件把动态请求转发给后端服务器
例如:nginx PHP mysql php就是中间件
4、支持加密的http就是https
5、可以实现重定向
6、虚拟主机,一个nginx可以配置多个域名和站点
7、nginx自带缓存机制
8、性能可扩展,处理能力可以随时调整
静态页面
转发动态请求
反向代理,负载均衡
缓存服务
参考之前的
唯独在压缩包下的configure目录里的配置文件新增一些插件
./configure --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ 支持https的加密功能ss/tls --with-http_v2_module \ 支持http2.0协议 --with-http_realip_module \ 支持nginx获取客户端的真是ip地址 --with-http_stub_status_module \ 支持nginx获取访问状态信息的功能 --with-http_gzip_static_module \ 支持页面压缩功能 --with-pcre \ 支持pcre库 --with-stream \ 支持4层代理的模块 --with-stream_ssl_module \ 支持对tcp连接的加密 --with-stream_realip_module 支持从代理协议中获取客户端的真实ip地址
编译安装
make -j 4 && make install #第一个make:编译;第二个make install:安装 #make -j 4 启动4个CPU进行处理
/usr/local/nginx
目录下的四个目录的解释/usr/local/nginx
目录下的四个目录的解释
conf
:配置文件目录,主配置文件nginx.conf
html
:工作目录:50x.html
默认的访问操作打开的页面,index.html
logs
:日志目录:访问日志、报错日志
sbin
:二进制启动脚本nginx
1、nginx -t 检测配置文件的语法是否正确
2、nginx -v 显示nginx的版本
-V 显示版本和配置项
3、nginx -s 信号 stop 关闭 reload 重新加载,如果更改了配置文件,nginx -s reload无需重启服务。
绝对路径/usr/local/nginx/conf/nginx.conf
#user nobody; 默认的程序用户就是nginx,这里可以保持注释无需修改 worker_processes 1; #工程进程数,设置成服务内核数的2倍(一般不超过8个,超过8个反而性能会降低4个,一般1-2个) pid /usr/local/nginx/run/nginx.pid; #pid 文件的位置 events { worker_connections 1024; } #与worker_processes一起看,决定了nginx能够处理的连接数和worker_processes 的数值相乘 #处理进程的过程必然涉及配置文件和展示页面,也是涉及打开文件的数量 #linux默认打开的文件数/etc/security/limits.conf修改限制,否则无论怎么修改都没用 # * soft nproc 65535 能打开的进程最大数的软限制是65535,65535是最大数 # * hard nproc 65535 能打开的进程最大数的硬限制是65535,65535是最大数 # * soft nproc 65535 进程打开文件数的最大值65535 # * hard nofile 65535 配置要生效,只能重启,这是系统初始化的一个环节 http { #http转发和处理http请求,处理静态页面,设置代理(正向代理,反向代理),缓存,定义日志格式,重定向配置 include mime.types; #文件扩展名与文件类型的映射表,nginx能够打开的文件和支持的文件类型 default_type application/octet-stream; #默认支持的文件类型 .html .htm .js .jsp .php #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #日志格式,默认的日志格式,记录了access.log 访问日志的格式,error.log也是这个格式 #access_log logs/access.log main; #默认的访问日志的存放路径 sendfile on; #支持文件发送或者下载 #tcp_nopush on; #默认就是异步非阻塞模式功能 #keepalive_timeout 0; keepalive_timeout 65; #连接保持的时间,nginx默认65s #gzip on; #gzip模块,设置是否开启页面压缩的功能 server { #在http下面,开启web服务的模块 listen 80; #设置nginx默认的监听端口 server_name localhost; #配置站点域名 #charset koi8-r; #网页默认字符集 #access_log logs/host.access.log main; location / { #网页匹配的工作目录的地址和支持的打开页面的文件类型 root html; #家目录,nginx工作目录的家目录,就是/usr/local/nginx/html 拼接 #alias也是指匹配nginx的工作目录 需要绝对路径 alias /usr/local/nginx/html 重点:root和alias匹配工作目录的区别 root 的匹配模式是拼接 root 的工作目录访问的url /xy102 location /xy102 /opt/test1 拼接/opt/test1/xy102 alias 匹配nginx的工作目录,路径是绝对路径 location /xy102 alias /opt/test1/xy102;决定路径 root可以写在server模块,也可以在http也可以在location中 alias 只能写在http模块当中的server模块当中的location模块里面 alias匹配工作目录不能使用重定向功能
总结:
全局模块(3个)
worker_processes 1; #指定进程数
events模块决定处理的连接数
stream 四层代理模块
http模块 http转发和处理http请求,处理静态页面,设置代理(正向代理,反向代理),缓存,定义日志格式,重定向配置。
在http模块当中 包含server块, http可以有多个server模块(一个server模块就等于一个主机)
在server模块当中包含location模块,在server当中可以有多个location
nginx服务的ip地址为192.168.10.20
使用nginx -V 检查 开启访问状态统计模块
修改配置文件,在server模块下新增location
使用浏览器访问192.168.10.20/status
Active connections: 1 #当前活动的连接数 server accepts handled requests #表示已经处理的连接数 35 35 35 #三个数字从左往右:已经处理的连接数 成功的建立连接的次数 已经处理的请求数 Reading: 0 Writing: 1 Waiting: 0 Reading 表示服务端正在从客户端读取请求是的数据 Writing 表示服务端正在把响应数据发送给客户端 Waiting 表示有连接处于空闲状态,等待新的请求
先安装一个工具 httpd-tools ,htpasswd的工具
yum -y install httpd-tools
使用htpasswd创建一个文件passwd.db 用于保存用户的信息,同时创建一个用户zlm,按照提示信息输入密码。
tpasswd -c /usr/local/nginx/passwd.db zlm chown nginx passwd.db #修改所有者 chmod 400 passwd.db #修改只读权限
修改配置文件
使用浏览器访问192.168.10.20/ ,提示输入输入用户名与密码
限制制定的ip进行访问
在server模块下的默认location下添加一个控制规则
使用curl访问192.168.10.20/ ,显示403用户请求禁止访问
在server模块下配置站点域名
在/etc/hosts做一个本地映射
index.html主页内容
使用curl访问域名,显示主页内容
在多个域名的情况下端口可以是一样的
在上一个实验的基础上重现定义一个server
在/etc/hosts做一个本地映射 ,一个ip地址可以映射多个域名,域名可以写在一行,也可以换行
index.html主页内容
使用curl对不同的域名进行访问
在多个域名的基础上修改
增加一个虚拟网卡192.168.10.100
监听的ip地址需要修改为虚拟网卡的地址
使用浏览器访问不同的ip 192.168.10.100 和192.168.10.20
端口号要在1-65535之间
使用浏览器进行访问不同的端口
在http模块下新增一行
在/usr/local/nginx/conf.d创建test1.conf文件
添加内容
使用浏览器访问888端口