一、Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
- Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
- 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
- Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
- 这些优秀的设计带来的极大的稳定性
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
02年开源
并发30000
二 正向代理
正向代理类似一个跳板机,代理访问外部资源
比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
三 反向代理
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
反向代理的作用:
(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
(2)负载均衡,通过反向代理服务器来优化网站的负载
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
Nginx 源码结构(代码量大约 11 万行 C 代码):
- 源代码目录结构 Core(主干和基础设置)
- Event(事件驱动模型和不同的 IO 复用模块)
- HTTP(HTTP 服务器和模块)
- Mail(邮件代理服务器和模块)
- OS(操作系统相关的实现)
- Misc(杂项)
Nginx 特点如下:
- 反向代理,负载均衡器
- 高可靠性、单 Master 多 Worker 模式
- 高可扩展性、高度模块化
- 非阻塞
- 事件驱动
- 低内存消耗
- 热部署
四、支持不停服务升级nginx
10000个keep-alive 非活动连接占2.5m内存
五、apache 和nginx区别
这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。
处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:
假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分明了。
六、程序架构
master/worker 进程结构
master负责加载和分析配置文件,管理worker进程,平滑升级
一个或多个worker进程处理并相应用户多个并发请求
七、模块
核心模块 core module
标准模块 http
stream tcp代理
第三方模块
八、nginx的功能
lvs是请求转发
静态web资源服务器
http/https协议的反向代理
imap4/pop3协议的反向代理
tcp/udp协议的请求转发(反向代理)
九、nginx安装
centos7
gcc -v
没有的安装gcc
yum -y install gcc
pcre、pcre-devel安装
pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
安装命令:
yum install -y pcre pcre-devel
zlib安装
zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装
安装命令:
yum install -y zlib zlib-devel
安装openssl
openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。
安装命令:
yum install -y openssl openssl-devel
解压下载的文件
tar -zxvf nginx-1.18.0.tar.gz
解压到usr/local/java
tar -zxvf japan.tar.gz -C /tmp/
切换到cd nginx-1.18.0
/下面
执行三个命令:
./configure
make
make install
安装之后会在usr/local/ 下创建一个nginx文件夹
常用模块
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module make && make install
配置nginx的配置文件nginx.conf文件,主要也就是端口
启动nginx服务
切换目录到/nginx/sbin下面
启动nginx命令:
./nginx
查看nginx服务是否启动成功
ps -ef | grep nginx
关闭防火墙
关闭防火墙命令:systemctl stop firewalld.service
ngnix 相关配置
启动nginx命令:
./nginx
./nginx -t
./nginx -s stop
./nginx -s quit
./nginx -s reload
查看nginx服务是否启动成功
ps -ef | grep nginx
tomcat优化
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443"
executor="tomcatThreadPool"
enableLookups="false"
acceptCount="100"
maxPostSize="10485760"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
acceptorThreadCount="2"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
URIEncoding="utf-8"/>
ngin模块配置说明
-
第一部分 全局块 主要设置一些影响 nginx 服务器整体运行的配置指令。 比如: worker_processes 1; , worker_processes 值越大,可以支持的并发处理量就越多。
-
第二部分 events块 events 块涉及的指令主要影响Nginx服务器与用户的网络连接。 比如: worker_connections 1024; ,支持的最大连接数。
-
第三部分 http块 http 块又包括 http 全局块和 server 块,是服务器配置中最频繁的部分,包括配置代理、缓存、日志定义等绝大多数功能。
-
-
server块:配置虚拟主机的相关参数。
-
location块:配置请求路由,以及各种页面的处理情况。
-
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878 weight=10;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 80; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
server {
listen 9000;
server_name 192.168.4.32; #监听地址
location ~ /example1/ {
proxy_pass http://127.0.0.1:5000;
}
location ~ /example2/ {
proxy_pass http://127.0.0.1:8080;
}
}
反向代理tomcat
# cd /etc/nginx/conf.d/ //切换到主机配置目录
# vi zrlog.wangzb.cc.conf //编辑配置文件,输入一下内容
server {
server_name zrlog.wangzb.cc;
location /
{
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#所有js,css相关的静态资源文件的请求由Nginx处理
location ~.*.(js|css)$ {
root /opt/static-resources; #指定文件路径
expires 12h; #过期时间为12小时
}
#所有图片等多媒体相关静态资源文件的请求由Nginx处理
location ~.*.(html|jpg|jpeg|png|bmp|gif|ico|mp3|mid|wma|mp4|swf|flv|rar|zip|txt|doc|ppt|xls|pdf)$ {
root /opt/static-resources; #指定文件路径
expires 7d; #过期时间为7天
}
#不允许直接访问WEB-INF
location ~ ^/(WEB-INF)/ {#这个很重要,不然用户就可以访问了
deny all;
}
}
# nginx -t
# nginx -s reload
upstream tomcats {
ip_hash;
server 192.168.0.251:8080;
server 192.168.0.251:8081;
server 192.168.0.251:8082;
}
location里
proxy_pass http://tomcats; #与tomcats.conf里配置的upstream同名
user nginx;
#nginx进程数,建议设置为等于CPU总核心数。
#worker_processes 4;
#定义工作进程的调度优先级
worker_priority -10;
#所有worker同时打开的文件数
worker_rlimit_nofile 65535
worker_processes auto;#根据CUP核心数几核就是几线程
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:#debug|info|notice|warn|error|crit|alert|emerg
pid logs/nginx.pid;
events {
#worker单个进程最大连接数(最大连接数=连接数*进程数)默认512
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
#日志格式定义
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 logs/access.log main;
sendfile on;
#keepalive_timeout 65;
keepalive_timeout 120; #长连接超时时间,单位是秒
#gzip压缩功能设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml;
charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓
client_max_body_size 8m; #设定请求缓
upstream mysvr {
ip_hash;
server 192.168.0.251:8080 weight=3;
server 192.168.0.251:8081;
server 192.168.0.251:8082;
}
server {
listen 80;
server_name www.test.com;#域名可以有多个,用空格隔开
location / {
#jsp网站程序根目录,一般nginx与tomcat在同一个目录
#root /usr/local/tomcat/webapps/ROOT;
#index index.html index.jsp index.html;
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
#deny 127.0.0.1; #拒绝的ip
#allow 172.18.5.54; #允许的ip
}
location ~ .*.jsp$ {
index index.jsp;
#proxy_pass http://127.0.0.1:8080; #来自jsp请求交给tomcat处理
proxy_redirect off;
proxy_set_header Host $host; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 6 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
location ~ .*.(html|jpg|jpeg|png|bmp|gif|ico|mp3|mid|wma|mp4|swf|flv|rar|zip|txt|doc|ppt|xls|pdf)$ #由nginx处理静态页面
{
expires 1h; #使用expires缓存模块,缓存到客户端1天
}
location ~ .*.( jsp|js|css)?$
{
expires 1h;
}
error_page 404 /404.html; #错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#不允许直接访问WEB-INF
location ~ ^/(WEB-INF)/ {#这个很重要,不然用户就可以访问了
deny all;
}
}
(1)切换到源码包:
cd /root/nginx-1.13.6
(2)配置信息:
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
(3)配置完成后,运行make进行编译,千万不要进行make install,否则就是覆盖安装。
make
到Windows文件C:WindowsSystem32driversetchosts中加入域名解析
192.168.1.34 zrlog.wangzb.cc
nginx+tomcat集群
https://www.jianshu.com/p/aa9f71d653af
nginx+tomcat 配置https
https://www.jb51.net/article/131766.htm