出来工作了差不多一年,还是很菜,就是个只晓得打代码的机器,出来研究点东西记录一哈。。。
正好现在项目用的nginx比较多,自己也来动手做一个。
第一步当然是下载
,—》Nginx官网下载
我这边是windows系统,一般都是选稳定版吧。(不是镜像所以会很慢)
直接解压
第二步启动,直接cmd打开命令行,输入 start nginx 就直接一闪而过,我们再输入 tasklist /fi “imagename eq nginx.exe”
可以查看是否存在该任务。
启动失败
- 也许是端口号被占用,nginx默认80
- 存放路径有中文符号*(一般来说,做这行的还是少用中文,毕竟咋咱现在也不用中文打代码。。。)*
- 其他的问题可以到 logs 的 errors.log 里面查看。
端口被占用就进入conf里面打开nginx.conf,找到listen,修改后面跟着的端口号,我这边还是默认80。
改完错误后检查conf文件是否有误 ,在一级安装目录下输入 nginx -t ,
successful就莫得问题了,如果是fail就得检查是否conf文件的格式啥的有问题。
接下来输入 nginx -s reload,正常的话是不会 有输出,然后打开浏览器输入localhost后面加上你改的端口号。
ok!
~~--------------------------------------------------------------------------
接下来开始按照自己的需求设置一个域名
用来做网站代理,我自己设置nginx.demo.com
server {
#站点监听端口
listen 80;
#站点访问域名
server_name nginx.demo.com;
以后直接访问这个就行了,设置了之后又reload一下nginx,但是莫得反应,搞了很久发现世界上根本莫得这个域名,访问当然是404。。。。
解决应该有两种方法,一直接买一个域名,这样浏览器就能访问到了,可我又菜又不知道买了域名能干嘛,(主要还是支付宝空空),直接在系统的host文件里面写一个域名。
这个host据说是计算机在访问网站时首先会在里面找,找不到再去访问互联网的。
打开host文件 Win+R -> c:\windows\system32\drivers\etc
编辑里面的host文件,就把自定义的域名放进去,跟别的东西用空格隔开就行了。
接下来访问你的域名,应该莫得问题了。
接下来做个负载均衡
打开nginx.conf文件,首先配置一个location
#代理配置参数
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $host;
proxy_set_header X-Forwarder-For $remote_addr;
#location用来匹配同一域名下多个URI的访问规则
#比如动态资源如何跳转,静态资源如何跳转等
#location后面跟着的/代表匹配规则
#反向代理的路径(和upstream绑定),location 后面设置映射的路径
location / {
proxy_pass http://balance_service;
#以下是一些反向代理的配置(可选择性配置)
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
#站点根目录,可以是相对路径,也可以使绝对路径
root html;
#默认主页
index index.html index.htm;
#拒绝请求,返回403,一般用于某些目录禁止访问
#deny all;
#允许请求
#allow all;
}
主要是这个: proxy_pass http://balance_service;
其他的具体咋也不知道呀,反正加上去应该会比较牛批吧。
配置一个 http://balance_service相当于一个坐标
#设定负载均衡的服务器列表
#设定实际的服务器列表
upstream balance_service{
#weigth参数表示权值,权值越高被分配到的几率越大
server localhost:8080 weight=5;
server localhost:1130 weight=5;
server localhost:8011 weight=5;
}
NOTICE:location要放在server里面,这个upstream 放在server外面
balance_service就匹配到了上面写的*http://balance_service
你想配多少个网站里面就放多少个 server 网站地址 weight=(被访问几率大小)。
接下来就访问域名,可以在你设置的网站里面随机跳转了。这应该就是什么负载均衡。。。
问题:css,image,js啥的没有加载
出现了这个问题,访问本地的项目不加载这些东西,找了一下资料,发现是因为nginx找不到这些以img,css,js为后缀的文件,所以我们需要主动告知nginx去找到这些文件去加载。
继续在nginx.conf里面编写
#(js css gif 是静态资源的后缀,不是文件夹的名字)反向代理的路径下找不到文件,需要单独指定js css文件的访问路径。
#配置静态资源 解决js css文件无法加载无法访问的问题,注意末尾不能有 /
location ~ .*\.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
proxy_pass http://balance_service;
}
http://balance_service;就是我们上面设置代理的坐标,让他可以被上面的upstream找到。
这下就可以加载出这些文件了。
**
问题:日志太多。
短短一天时间,我的日志文件就出来了12G,还好我这是在本地哦,要是在线上不得直接炸啦。
在logs文件夹里面,一个是access.log,一个是error.log。
首先我们不能让nginx啥都写日志里边。
先优化一下他们记录的东西
#添加这一行 将不记录这些文件类型
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 12h;
access_log off;
}
#这部分原来是没有的,我们只记录访问php文件就可以了。
location ~ .*\.(html|htm)$ {
access_log off;
}
这是access.log,然后轮到error.log
#全局错误日志
error_log logs/error.log;
#配置等级太低的error会消耗大量的I/O
#error_log logs/error.log notice;
#error_log logs/error.log info;
这样子虽然记录的少了,但日积月累还是挺多的,想想就不舒服,我这边就搞个日志分割脚本,其他人说别的操作系统做这个挺方便的,windows系统首先写个bat批处理文件
for /f "tokens=1 delims=/ " %%j in ("%date%") do set d1=%%j
for /f "tokens=2 delims=/ " %%j in ("%date%") do set d2=%%j
for /f "tokens=3 delims=/ " %%j in ("%date%") do set d3=%%j
set backupdir=d:\nginx_logs\%d1%\%d2%\%d3%
mkdir %backupdir%
move c:\nginx-1.16.1\logs\*.log %backupdir%
c:\nginx-1.16.1\nginx -s reload
首先根据当前时间得出年月日;
定义一个backupdir我打算把切割的文件放在D盘的nginx_logs下面,后面分不同的年、月、日存储不同天的日志信息;
mkdir创建文件,
将nginx安装目录下的logs的log文件移到定义的backupdir文件里面
然后在reload一下这个nginx。
windows系统下的所有程序–》附件—》系统工具—》任务计划程序里边添加一个任务,每天一次就执行,这样就可以分年月日去记录上面的日志文件。
主要做的就是这么多,这样就可以基本使用了,下面是我整个nginx.conf文件,都上了注释,有些是没有亲自去试过的,就莫得在上面提到,但写了可以会提高使用的效率吧。
#user nobody;
#==工作进程数,一般设置为cpu核心数
worker_processes 1;
#全局错误日志
error_log logs/error.log;
#配置等级太低的error会消耗大量的I/O
#error_log logs/error.log notice;
#error_log logs/error.log info;
#PID文件,记录当前启动的nginx的进程ID
pid logs/nginx.pid;
#工作模式及连接数上限
events {
#==最大连接数,一般设置为cpu*2048
worker_connections 1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型(邮件支持类型),类型由mime.types文件定义
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"';
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#==客户端链接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#gzip压缩开关
#gzip on;
#设定负载均衡的服务器列表
#设定实际的服务器列表
upstream balance_service{
#weigth参数表示权值,权值越高被分配到的几率越大
server localhost:8080 weight=5;
server localhost:1130 weight=5;
server localhost:8011 weight=5;
}
#当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点
server_names_hash_bucket_size 1024;
#server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点
#每一个请求进来确定使用哪个server由server_name确定
server {
#站点监听端口
listen 80;
#站点访问域名
server_name nginx.demo.com;
#首页
index index.html
#代理配置参数
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
proxy_set_header Host $host;
proxy_set_header X-Forwarder-For $remote_addr;
#location用来匹配同一域名下多个URI的访问规则
#比如动态资源如何跳转,静态资源如何跳转等
#location后面跟着的/代表匹配规则
#反向代理的路径(和upstream绑定),location 后面设置映射的路径
location / {
proxy_pass http://balance_service;
#以下是一些反向代理的配置(可选择性配置)
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
#站点根目录,可以是相对路径,也可以使绝对路径
root html;
#默认主页
index index.html index.htm;
#拒绝请求,返回403,一般用于某些目录禁止访问
#deny all;
#允许请求
#allow all;
}
#静态文件,nginx自己处理
#location ~ ^/(images|javascript|js|css|flash|media|static)/ {
# root D:\01_Workspace\Project\github\zp\SpringNotes\spring-security\spring-shiro\src\main\webapp\views;
# #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
# expires 30d;
#}
#设定查看Nginx状态的地址
location /nginx_status {
stub_status on;
allow 192.168.1.83;
deny all;
access_log off;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}
charset utf-8;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#(js css gif 是静态资源的后缀,不是文件夹的名字)反向代理的路径下找不到文件,需要单独指定js css文件的访问路径。
#配置静态资源 解决js css文件无法加载无法访问的问题,注意末尾不能有 /
location ~ .*\.(js|css|jpg|jpeg|gif|png|ico|pdf|txt)$ {
proxy_pass http://balance_service;
}
#添加这一行 将不记录这些文件类型
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 12h;
access_log off;
}
#这部分原来是没有的,我们只记录访问php文件就可以了。
location ~ .*\.(html|htm)$ {
access_log off;
}
}
}