题外话:阿里云免费送了一年服务器,项目部署上去了,域名也有了,但是还少了一个反向代理和web容器工具于是乎nginx的学习十分必要了
发现自己的学习,除了最开始的很系统的从底向上从顶到底学了一遍JAVA,后来自己都是有需求就研究研究诶.
1.什么是nginx,nginx?
- Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:作为Web服务器:相比Apache,Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使Nginx尤其受到虚拟主机提供商的欢迎。能够支持高达50000个并发连接费的响应,感谢Nginx为我们选择了epoll and kqueue作为开发模型.
- 作为负载均衡服务器:Nginx既可以在内部直接支持Rails和PHP,也可以支持作为HTTP代理服务器对外进行服务。Nginx用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多
- 作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm描述了成功并且美妙的使用经验。
优点
Nginx安装非常的简单,配置文件非常简洁(还能够支持per语法),Bugs非常少的服务器:Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下进行软件版本的升级。
nginx可以作为web服务器,但更多的时候,我们把它作为网关
为啥?因为网关有的功能,它都可以做到,如下....而且优点上面都介绍清楚了.
- 反向代理
- 负载均衡
- 动态路由
- 请求过滤
2. web服务器类别
- web应用服务器 (可以解析jsp和静态html css js等 )并发能力低
- jetty
- resin
- tomcat (200并发)
- web服务器 不能解析jsp但是并发能力高
- apache服务器
- nginx(目前最流行,可以达到5W并发)
- IIS(微软的,功能挺多的,在window server服务器上比较流行(内置IIS,天然集成,占用80端口))
3. 代理与反向代理
- 代理:通过客户机的配置,实现让一台服务器代理客户机,客户的所有请求都交给代理服务器处理。)
- 反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器。
关于两者详细区别可以点击此连接查看,文章里打的比喻比较风趣和贴切 哈
4.nginx的负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash。
扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。
上3个图,理解这三种负载均衡算法的实现
Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
4.nginx如何当做反向代理服务器来使用?
- 我们需要提前在nginx中配置好反向代理的规则,不同的请求,交给不同的真实服务器处理
- 当请求到达nginx,nginx会根据已经定义的规则进行请求的转发,从而实现路由功能
5.nginx下载
参考https://www.cnblogs.com/xxoome/p/5866475.html
下载解压好了,这里看以下nginx里有啥玩意
- conf毫无疑问是配置目录
- contrib是依赖
- html默认静态页面
vi进入后编辑,这里以注释的方式解读一下配置
#user nobody;
worker_processes 1; //工作进程数(处理请求的进程)(通常不大于服务器核数)
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;//工作连接数-线程数
}
http { //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;//是否开启文件上传功能
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;//连接最大时间
#gzip on;
server {//一个server就是一个代理
listen 80;//监听的服务端口
server_name localhost;//这个主机的都默认转到80端口
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
参考:
菜鸟教程Nginx
nginx中文文档
Nginx 配置文件详解
运行和控制Nginx
nginx域名配置
前端项目发布到nginxweb服务器