一 Nginx的安装配置
1: 下载 nginx
官网下载 http://nginx.org/en/download.html 或者网盘下载
链接:https://pan.baidu.com/s/1sYL-0bzoA45xulfOnicx0Q
提取码:hvmv
下载稳定版本,以nginx/Windows-1.14.2为例,直接下载 nginx-1.14.2.zip
下载后解压,解压后如下
2: 启动 nginx
1)直接双击 nginx.exe 进行启动
2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可
3)检查nginx是否启动成功
直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功
另:可设置开机自启Nginx
参考博客: http://blog.haoji.me/windows-nginx-server.html
Windows下 常用命令:
1)start nginx 启动
2)nginx.exe -s stop 停止
3)nginx.exe -s reload 重新加载配置文件
4)nginx.exe -s reopen 重新打开日志文件
5)nginx -v 查看版本
3: nginx 的配置文件
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。
整体结构如下:
http {
server {
listen 82; #监听端口
server_name localhost; # 服务地址
#具体代理实现
location / {
root html;
proxy_pass http://127.0.0.1:8080; #代理路径
index index.html index.htm; #nginx配置静态资源
}
}
server {
listen 81;
server_name localhost;
}
.............
}
二 Nginx的配置文件nginx.conf 理论学习
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
1:反向代理实战
#不同路径请求不同服务器配置
server {
listen 81;
server_name localhost;
location /test1/ {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
location /test2/ {
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
location / {
root html;
proxy_pass http://127.0.0.1:8082;
index index.html index.htm;
}
}
2:负载均衡配置实战
策略:1:轮询(默认) 2:weight=1 权重最高
3:ip_hash; 根据第一次ip固定绑定访问服务器地址
4:fair; 根据响应时间分配
upstream myserver {
server 127.0.0.1:8000; #ip地址
server 127.0.0.1:9090;
server 127.0.0.1:8080;
}
3: 动静分离
server {
listen 80;
server_name localhost;
#静态资源
location /jingtai {
root /static/html/;
index index.html index.htm;
}
#动态资源
location /dongtai {
root /data/;
autoindex on;
}
}
4: 高可用 集群
4: Nginx的限流方式(两个指令)
limit_req_zone 参数配置
ngx_http_limit_conn_module 参数配置
其他详解
具体实列如下:
#user nobody;
worker_processes 2;
#error_log logs/error.log;
#pid logs/nginx.pid;
#最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
worker_rlimit_nofile 360000;
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
#use epoll;
#单个后台worker process进程的 最大并发链接数
worker_connections 100000;
#是否串行处理连接
multi_accept off;
}
http {
#文件扩展名与类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#设定请求缓存
#户端请求的最大可接受体大小,由行表示
client_max_body_size 50m;
#服务器名字的hash表大小
server_names_hash_bucket_size 256;
#客户机的请求头设置大小,对于绝大多数请求,1K的缓冲区大小就足够了
client_header_buffer_size 256k;
#用来指定客户端请求中较大的消息头的缓存最大数量和大小
large_client_header_buffers 4 256k;
#用于配置转发至tomcat后;tomcat获取客户端正式ip
#允许重新定义和添加一些将被传输到代理服务器的请求头行。作为值,可以使用文本、变量及其组合。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#解决js跨域的问题
#增加头标
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
#指定客户机请求体缓冲区大小。
client_body_buffer_size 256k;
#客户机的请求头设置读取超时。
client_header_timeout 3m;
#客户机的请求体设置读取超时。
client_body_timeout 3m;
#客户端分配响应超时时间。
send_timeout 3m;
#访问日志存放路径
access_log no;
#客户端连接保持活动的超时时间,在超过这个时间之后服务器会关闭该链接。
keepalive_timeout 0;
#修改或隐藏Nginx的版本号
server_tokens off;
#虚拟主机配置
server {
#listen指令指定所包含的服务器接受的地址和端口。可以只指定地址、端口或服务器名作为地址
listen 80;
#e用来指定ip地址或者域名,多个域名之间用空格分开
server_name localhost;
#对 "/gzh" 启用反向代理
# location /gzh
# {
# #根据表达式来更改URI,或者修改字符串。注意重写表达式只对相对路径有效。
# #此处是将/gzh以前的地址替换成http://weixin.qq.com/q/xxx
# rewrite ^ http://weixin.qq.com/q/xxx;
# }
# location /admin {
# root /usr/share/nginx/dist/;
# index index.html index.htm;
# }
location /peng {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
# proxy_set_header Host $proxy_host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Via "nginx";
}
#跳转到/peng
location / {
proxy_pass http://127.0.0.1:8080/peng/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#后台管理
server
{
listen 8080;
server_name localhost;
#default_type 'text/html';
charset utf-8;
#静态资源的分配
location / {
root /usr/share/nginx/dist/;
index index.html index.htm;
}
#后台访问接口代理
location /peng {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
# proxy_set_header Host $proxy_host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Via "nginx";
}
}
# server
# {
# listen 8080;
# server_name localhost;
# #default_type 'text/html';
# charset utf-8;
# # 日志级别
# #error_log logs/error.log info;
# location / {
# root /usr/share/nginx/dist/;
# index index.html index.htm;
# }
# }
# server
# {
# listen 8080;
# server_name localhost;
# #default_type 'text/html';
# charset utf-8;
# # 日志级别
# #error_log logs/error.log info;
# location /test {
# default_type text/html;
# return 200 "207_8081";
# }
# location /peng {
# proxy_pass http://127.0.0.1:8080;
# proxy_set_header Host $proxy_host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Via "nginx";
# }
# location / {
# root html;
# index index.html index.htm;
# }
# }
}
补充说明:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请 求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~ 标识。