nginx使用文档
说明:本文没有安装步骤,安装很简单。本文只说明配置内容
简介
1、nginx的作用
1)反向代理
2)负载均衡
3)动静分离
1.1 使用反向代理的目的
由于某种原因真实的服务器不能够被外部网络访问,想要访问就必须通过一台代理服务器。反向代理(ReverseProxy)就是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器。
使用反向代理:
防止主服务器被恶意攻击;
为负载均衡和动静分离提供实现支持;
配置实战
1、配置简介
配置文件nginx.conf
下面展示一些 内联代码片
。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
第一部分:全局配置
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配
置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以
及配置文件的引入等。
例:
worker_processes 1;
worker_processes 值越大,可以支持的并发处理量也越多;
第二部分events
例:
events {
worker_connections 1024;
}
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process
下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word
process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
第三部分http
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
包括的server块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
1、全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
2、location 块
一个 server 块可以配置多个 location 块。这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
反向代理配置
1、通过nginx代理访问一台tomcat服务器
修改配置后需要重启nginx后生效
nginx.conf增加如下配置
server {
listen 80;
server_name www.nginxtest.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
我们监听 80 端口,访问域名为 www.nginxtest.com,不加端口号时默认为 80 端口,故访问该域名时会跳转到 127.0.0.1:8080 路径上。在浏览器端输入 www.nginxtest.com(host文件中配置了此域名解析)
反向代理示例
实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中nginx 监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
配置文件中添加
server {
listen 9001;
server_name localhost;
location ~ /edu/ {
proxy_pass http://localhost:8001;
}
location ~ /vod/ {
proxy_pass http://localhost:8002;
}
}
location 指令说明
该指令用于匹配 URL。
语法如下:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
负载均衡配置
轮询
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#默认轮询
upstream servers{
server 192.168.2.213:8080;
server 192.168.2.213:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://servers;
}
}
}
权重,权重越大,被分配的几率越大
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream servers{
server 192.168.2.213:8080 weight=2;
server 192.168.2.213:8080 weight=4;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://servers;
}
}
}
iphash 同一个ip下访问会被分配到同一个服务器
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream servers{
ip_hash
server 192.168.2.213:8080;
server 192.168.2.213:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://servers;
}
}
}
fair 按后端服务器响应时间来分配,时间越短优先分配
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream servers{
server 192.168.2.213:8080;
server 192.168.2.213:8081;
fair
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://servers;
}
}
}
nginx缓存静态资源
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#压缩配置#
gzip on; #打开gzip压缩功能
gzip_min_length 1k; #压缩阈值
gzip_buffers 4 16k; #buffer 不用修改
gzip_comp_level 2; #压缩级别:1-10,数字越大压缩的越好,时间也越长
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; # 压缩文件类型
gzip_vary off; #跟Squid等缓存服务有关,on的话会在Header里增加 "Vary: Accept-Encoding"
gzip_disable "MSIE [1-6]\."; #IE1-6版本不支持gzip压缩
##缓存cache参数配置##
proxy_connect_timeout 5; #nginx跟后端服务器连接超时时间(代理连接超时时间长度)
proxy_read_timeout 60; #连接成功后,后端服务器响应时间(代理接收超时时间长度)
proxy_send_timeout 5; #后端服务器数据回传时间(代理发送超时)
proxy_buffer_size 16k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 464k; #proxy_buffers缓冲区,网页平均在666k以下
proxy_busy_buffers_size 128k; #高负荷下缓冲大小(建议设置大小proxy_buffers*2)
proxy_temp_file_write_size 128k; #设定缓存文件夹大小
#缓存到nginx的本地目录
proxy_temp_path /var/cache/nginx/cache/; #缓存临时文件夹
#设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。
proxy_cache_path /var/cache/nginx/cache/cache_temp levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
server {
listen 80;
server_name localhost;
location ~ \.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
proxy_pass http://192.168.2.213:8080; #如果没有缓存则通过proxy_pass转向请求
proxy_cache cache_one;
proxy_cache_valid 200 302 1h; #对不同的HTTP状态码设置不同的缓存时间,h小时,d天数
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d; #缓存时间30填
}
}
}