开源版:Nginx.org 商业版: Nginx.com
若是是开发 API 服务或者是 Web 防火墙,能够选择 openResty .html
# 下载 Nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
# 进行解压
tar -xzf nginx-1.16.1.tar.gz
# 查看编译相关的命令
./configure --help
# 进行编译,PATH 是你本地指定的安装目录
./configure --prefix=PATH
# 执行首次安装命令
make install
复制代码
nginx -s reload
-h
-c
-g
-p
-s
指运行期间执行相关命令;重启nginx: nginx - s reload
; 进行日志切割: nginx -s reopen
-t -T
-v -V
# 开启 gizp 压缩
gizp on;
location {
root /root/data/web/dist;
index index.html index.htm;
}
复制代码
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的链接请求,而后将请求转发给内部网络上的服务器;并将从服务器上获得的结果返回给Internet上请求链接的客户端,此时代理服务器对外就表现为一个服务器。 一般的代理服务器,只用于代理内部网络对Internet的链接请求,客户机必须指定代理服务器,并将原本要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器可以代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。 一台机器做为代理机器,能够根据负载均衡算法,将请求转发给下游服务器。nginx
反向代理服务器一般有两种模型:web
在防火墙外部设置一个代理服务器做为内容服务器的替身。当外部客户机尝试访问服务时,会访问到代理服务器,再由其代理到防火墙内部的内容服务器上。这样实际内容位于内容服务器上,在防火墙内部受到安全保护。代理服务器位于防火墙外部,在客户机看来就像是内容服务器。算法
能够利用代理服务器的高速缓存特性,建立一个用于负载均衡的服务器池,使用多个代理服务器来平衡各 Web 服务器间的网络负载,这样当 Web 服务器接收大量的请求时,可使用代理服务器分担 Web 服务器的负载,以此提升网络访问效率。后端
location {
root /root/data/web/dist;
index index.html index.htm;
# 配置代理转发
proxy_pass:
}
复制代码
nginx中有两个模块有 proxy_pass 指令:ngx_http_proxy_module 的 proxy_pass; ngx_stream_proxy_module 的 proxy_pass缓存
ngx_stream_proxy_module 模块的 proxy_pass 指令只能在 server 段使用使用, 只须要提供域名或ip地址和端口。能够理解为端口转发,能够是 tcp 端口,也能够是 udp 端口。 ngx_http_proxy_module 模块的 proxy_pass 指令须要在 location 段,location中的 if 段,limit_except 段中使用,除了须要提供域名或ip地址和端口外,还须要提供协议,如"http"或"https",还有一个可选的 uri 能够配置。安全
server {
listen 127.0.0.1:12345;
proxy_pass 127.0.0.1:8080;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 1m;
proxy_pass example.com:12345;
}
server {
listen 53 udp;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass dns.example.com:53;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
复制代码
server {
listen 80;
server_name www.test.com;
# 正常代理,不修改后端url的
location /some/path/ {
proxy_pass http://127.0.0.1;
}
# 修改后端url地址的代理(本例后端地址中,最后带了一个斜线)
location /testb {
proxy_pass http://www.other.com:8801/;
}
# 使用 if in location
location /google {
if ( $geoip_country_code ~ (RU|CN) ) {
proxy_pass http://www.google.hk;
}
}
location /yongfu/ {
# 没有匹配 limit_except 的,代理到 unix:/tmp/backend.socket:/uri/
proxy_pass http://unix:/tmp/backend.socket:/uri/;;
# 匹配到请求方法为: PUT or DELETE, 代理到9080
limit_except PUT DELETE {
proxy_pass http://127.0.0.1:9080;
}
}
}
复制代码
由于反向代理之后,内容服务器接收到的请求参数来自于反向代理服务器,经过 proxy_set_header 字段进行设置,能够拿到客户端的请求参数.bash
location / {
proxy_set_header Host $host;
proxy_ser_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
复制代码
咱们能够将一些信息缓存到内存中服务器
http {
#
proxy_cache_path path;
location / {
# cache_name 就是内存的存储位置
proxy_cache cache_naem;
}
}
复制代码
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path
缓存文件的路径 +
[levels=levels] 设置缓存文件目录层次;levels=1:2 表示两级目录
[use_temp_path=on|off] 临时文件的目录
keys_zone=name:size 设置缓存名字和共享内存大小
[inactive=time] 在指定时间内没人访问则被删除
[max_size=size] 在指定时间内没人访问则被删除
[manager_files=number]
[manager_sleep=time]
[manager_threshold=time]
[loader_files=number]
[loader_sleep=time]
[loader_threshold=time]
[purger=on|off]
[purger_files=number]
[purger_sleep=time]
[purger_threshold=time];
复制代码