水贴,没理清楚。建议不看。
中文官网
英文官网
它的内容可以说相比其他的技术技术是要少的。
为什么要用nginx?
现在是信息大爆炸的时代,瞬间并发的场景是非常的多的。
如上图,分布式是解决并发的一个思路。
Apache和Nginx都有能力提供每秒钟庞大的请求服务,但是随着并发数量的增加,Apache的性能开始下降,然而Nginx的性能几乎不会下降。所以使用nginx偏向更多。
nginx中几个重要的概念:反向代理、负载均衡、动静分离。
代理的概念:
现在很多企业,都有自己的代理。通过另一个服务器,转到目标服务器。比如你–公司代理服务器–目标服务器。
正向和反向的区别:公司代理服务器–目标服务器(反向隐藏了目标服务器)。
负载均衡的概念:
比如上面这些地方,分布式tomcat01搜索服务器、02图片/文件服务器、03产品详细服务器等等。将我们一个页面的数据请求压力分给不同的服务器处理。这就负载均衡。
动静分离的概念:
资源分为静态和动态。不同的理解不一样。一般来说html、js、css等是静态资源,而动态资源的理解是要和数据库或其他存储库交互就是动态,不交互的静态。
这个不难理解,当前企业中一个项目都有静态资源服务器。里面主要是国际化、图标、json串、主题等等。
常用命令:
/usr/local/webserver/nginx/sbin/nginx #启动
/usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx
配置文件位置:/usr/local/webserver/nginx/conf/nginx.conf
这是重点。
详细的介绍还是以英文官网为主的好。
主要就是上面第一张图的三部分:基本的HTTP服务器功能(Basic HTTP server features)、其他HTTP服务器功能(Other HTTP server features)、邮件代理服务器功能(Mail proxy server features)
配置文件中:全局块、events块、http块
结构:
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
# 从开始到events都是全局块
user www www; # 创建好的运行使用的用户 www及密码
worker_processes 2; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535; # 最连接数
# evnets块 主要是nginx服务器域用户的网络连接
events
{
use epoll;
worker_connections 65535;
}
# 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';
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
# 下面是server虚拟主机的配置
server
{
listen 80;#监听端口
server_name localhost;#域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html;#站点目录
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
# access_log off;
}
access_log off;
}
}
反向代理(多个服务器)和负载均衡(一个服务器下多个微服务器)场景:
模拟(你还可以分更细):(下面不能作为实际参考,只是为了个人学习理解)
tomcat01:文件服务器content 请求格式 http://10.186.1.251:9001/content/content/10001/image?id=83u9nfds24nnfjs
tomcat02:登陆及权限服务器acount 请求格式 http://10.186.1.251:9002/acount/acount/isLogin
tomcat03:商品信息服务器shop 请求格式 http://10.186.1.251:9003/shop/shop/ProdcutId/info
nginx服务器:http://10.186.1.54:8721
做一个映射:
http://10.186.1.54:8721/content --- tomcat01
http://10.186.1.54:8721/acount --- tomcat02
http://10.186.1.54:8721/shop --- tomcat03
主要是http和server的配置:
upstream myserver {
server http://10.186.1.251:9001;
server http://10.186.1.251:9002;
server http://10.186.1.251:9003;
}
server
{
listen 8721; #监听端口
server_name 10.186.1.54; #域名
location ~ /
{
proxy_pass http://myserver;
}
location ~ /content/
{
proxy_pass http://10.186.1.251:9001;
}
location ~ /acount/
{
proxy_pass http://10.186.1.251:9002;
}
location ~ /shop/
{
proxy_pass http://10.186.1.251:9003
}
access_log off;
}
注意开放端口。可以看到重点在location的正则表示。
负载均衡的相关策略:
1、轮询(默认):按时间顺序逐一分配到后端服务器。
2、weight(权重):默认为1,权重越高被分配的客户端越多。
3、ip_hash:根据ip的hash值方式访问,这样可以保证每个访客固定访问一个后端服务器,可解决session的问题。
动静分离:就是将动态请求和静态请求分开。
比如asset目录下就是静态。通过参数expries设置,可以使浏览器缓存过期。在缓存有效期内,不需要再去请求。此种方式特别适合那些不常变动的资源。
配置和上面差别不大。