一、安装
-
去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本
-
上传nginx到linux系统
-
安装依赖环境
(1)安装gcc环境
yum install gcc-c++
(2)安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
(3)zlib压缩和解压缩依赖,
yum install -y zlib zlib-devel
(4)SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
-
解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.16.1.tar.gz
-
编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
-
在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件
./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi
-
make编译
make
-
安装
make install
-
进入sbin目录启动nginx
./nginx
二、nginx.conf 核心配置文件
-
设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为
nobody
user root;
-
worker进程工作数设置,一般来说CPU有几个,就设置几个,或者设置为N-1也行
worker_processes 1;
-
nginx 日志级别
debug | info | notice | warn | error | crit | alert | emerg
,错误级别从左到右越来越大 -
设置nginx进程 pid
pid logs/nginx.pid;
-
设置工作模式
events { # 默认使用epoll use epoll; # 每个worker允许连接的客户端最大连接数 worker_connections 10240; }
-
http 是指令块,针对http网络传输的一些指令配置
http { }
-
include 引入外部配置,提高可读性,避免单个配置文件过大
include mime.types;
-
设定日志格式,
main
为定义的格式名称,如此 access_log 就可以直接使用这个变量了参数名 参数意义 $remote_addr 客户端ip $remote_user 远程客户端用户名,一般为:’-’ $time_local 时间和时区 $request 请求的url以及method $status 响应状态码 $body_bytes_send 响应客户端内容字节数 $http_referer 记录用户从哪个链接跳转过来的 $http_user_agent 用户所使用的代理,一般来时都是浏览器 $http_x_forwarded_for 通过代理服务器来记录客户端的ip -
sendfile
使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush
,是指当数据表累积一定大小后才发送,提高了效率。sendfile on; tcp_nopush on;
-
keepalive_timeout
设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0;
keepalive_timeout 65;
-
gzip
启用压缩,html/js/css压缩后传输会更快gzip on;
-
server
可以在http
指令块中设置多个虚拟主机- listen 监听端口
- server_name localhost、ip、域名
- location 请求路由映射,匹配拦截
- root 请求位置
- index 首页设置
server { listen 88; server_name localhost; location / { root html; index index.html index.htm; } }
三、root 与 alias
假如服务器路径为:/home/imooc/files/img/face.png
-
-
root 路径完全匹配访问
配置的时候为:location /imooc { root /home }
-
用户访问的时候请求为:url:port/imooc/files/img/face.png
-
-
alias 可以为你的路径做一个别名,对用户透明
配置的时候为:location /hello { alias /home/imooc }
用户访问的时候请求为:
url:port/hello/files/img/face.png
,如此相当于为目录imooc
做一个自定义的别名。
-
四、日志分割
-
创建一个shell可执行文件:
cut_my_log.sh
,内容为:#!/bin/bash LOG_PATH="/var/log/nginx/" RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M) PID=/var/run/nginx/nginx.pid mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log #向Nginx主进程发送信号,用于重新打开日志文件 kill -USR1 `cat $PID`
-
为
cut_my_log.sh
添加可执行的权限:chmod +x cut_my_log.sh
-
测试日志切割后的结果:
./cut_my_log.sh
-
crontab -e
编辑并且添加一行新的任务:59 23 * * * /usr/local/nginx/sbin/cut_my_log.sh
-
重启定时任务:
service crond restart
五、Gzip压缩
-
编辑nginx核心配置文件
vim /usr/local/nginx/conf/nginx.conf
-
添加如下代码
#开启gzip压缩功能,目的:提高传输效率,节约带宽 gzip on; #限制最小压缩,小于1字节的文件就不会压缩了 gzip_min_length 1; #定义压缩比,文件越大,压缩越多,cpu使用就越大 gzip_comp_level 3; #定义压缩文件的类型 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/json;
六、location 的匹配规则
-
空格
:默认匹配,普通匹配location / { root /home; }
-
=
:精确匹配location = /imooc/img/face1.png { root /home; }
-
~*
:匹配正则表达式,不区分大小写#符合图片的显示 location ~ .(GIF|jpg|png|jpeg) { root /home; }
-
~
:匹配正则表达式,区分大小写#GIF必须大写才能匹配到 location ~ .(GIF|jpg|png|jpeg) { root /home; }
-
^~
:以某个字符路径开头location ^~ /imooc/img { root /home; }
七、Nginx 跨域配置支持
#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
八、Nginx配置tomcat集群
#配置上游服务器
#轮询 upstream tomcats{ server xxxxx1:8080; server xxxxx2:8081; server xxxxx3:8082; }
#加权轮询
#upstream tomcats{
# server xxxxx1:8080 weight=1;
# server xxxxx2:8081 weight=2;
# server xxxxx3:8082 weight=5;
#}
#限制连接数
#upstream tomcats{
# server xxxxx1:8080 max_conns=2;
# server xxxxx2:8081 max_conns=2;
# server xxxxx3:8082 max_conns=2;
#}
server { listen 80; server_name yyyyy; location / { proxy_pass http://tomcats; } }
九、Nginx的缓存
静态资源缓存
location /files { alias /home/imooc; # expires 10s; # expires @22h30m; # expires -1h; # expires epoch; # expires off; expires max; }
反向代理缓存
# proxy_cache_path 设置缓存目录 # keys_zone 设置共享内存以及占用空间大小 # max_size 设置缓存大小 # inactive 超过此时间则被清理 # use_temp_path 临时目录,使用后会影响nginx性能 proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off; location / { proxy_pass http://tomcats; # 启用缓存,和keys_zone一致 proxy_cache mycache; # 针对200和304状态码缓存时间为8小时 proxy_cache_valid 200 304 8h; }
整理自慕课网《java架构师体系课》