Nginx基础使用配置

目录(逐步完善更新中)

一、Nginx在虚拟机下的安装

二、Nginx.conf文件配置详解

三、Nginx 日志切割-手动

四、Nginx 日志切割-定时

五、Nginx跨域与防盗链

六、Nginx负载均衡-搭建tomcat集群

七、upstream 指令详解

八、 Nginx的反向代理缓存

九、 Nginx配置HTTPS域名证书


一、Nginx在虚拟机下的安装

1. 安装依赖

# 安装依赖
yum install -y gcc-c++ # 安装 gcc 环境
yum install -y pcre pcre-devel # 安装 PRCE 库,用于解析正则表达式
yum install -y zlib zlib-devel 
yum install -y openssl openssl-devel  # https协议

2. 下载Nginx 

建议切换至 /home/software 目录下下载,目录不存在执行:mkdir -p /home/software

wget http://nginx.org/download/nginx-1.16.1.tar.gz

3. 解压

tar -zxvf nginx-1.16.1.tar.gz

4. 创建临时目录

mkdir -p /var/temp/nginx

5. 进入解压目录

cd nginx-1.16.1/

6. 配置make文件

 ./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

含义说明:

命令解释
–prefix指定nginx安装目录
–pid-path指向nginx的pid
–lock-path锁定安装文件,防止被恶意篡改或误操作
–error-log错误日志
–http-log-pathhttp日志
–with-http_gzip_static_module启用gzip模块,在线实时压缩输出数据流
–http-client-body-temp-path设定客户端请求的临时目录
–http-proxy-temp-path设定http代理临时目录
–http-fastcgi-temp-path设定fastcgi临时目录
–http-uwsgi-temp-path设定uwsgi临时目录
–http-scgi-temp-path设定scgi临时目录

7. 执行命令安装Nginx

make && make install

8. 启动Nginx

进入命令目录:

cd /usr/local/nginx/sbin

启动命令:

./nginx           # 启动
./nginx -s stop   # 直接停止
./nginx -s quit   # 优雅停止
./nginx -s reload # 重新加载
./nginx -t        # 检测配置文件
./nginx -v        # 查看 Nginx 版本

二、Nginx.conf文件配置详解

#默认,允许所有用户表启动
#user  nobody; 
#工作线程,一般配置为服务器核心数,若服务器搭建有其他服务,建议为 核心数-1
worker_processes  1;

#日志配置,路径 级别 debug > info > notice > warn > error > crit > alert > emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid文件路径
#pid        logs/nginx.pid;

#
events {
    #配置最大连接数
    worker_connections  1024;
}

http {
    #配置文件引入
    include       mime.types;
    default_type  application/octet-stream;
	
    #自定义服务日志格式(与下方access_log为一组)
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    # main 为定义的格式名称,如此 access_log 就可以直接使用这个变量了
    #access_log  logs/access.log  main;

    # 使用高效文件传输,提升传输性能。启用后才能使用 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       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;
        }
    }
}

  log_format 说明:

参数名参数意义
$remote_addr客户端ip
$remote_user远程客户端用户名,一般为:’-’
$time_local时间和时区
$request请求的url以及method
$status响应状态码
$body_bytes_send响应客户端内容字节数
$http_referer记录用户从哪个链接跳转过来的
$http_user_agent用户所使用的代理,一般来时都是浏览器
$http_x_forwarded_for通过代理服务器来记录客户端的ip

 

root 与 alias :

root使用:

假如服务器资源路径为:

/home/dingwh/image/1.jpg

root 路径完全匹配访问 配置的时候为:

location /dingwh{
    root /home
}

用户访问的时候请求为:

url:port/dingwh/image/1.jpg  参考:192.168.1.1:89/dingwh/image/1.jpg

 

alias使用:

配置location:

location /static{
     alias /home/dingwh
}

则访问请求为:192.168.1.1:89/static/image/1.jpg

location 的匹配规则:
1 空格 :默认匹配,普通匹配

location / {      
    root /home; 
}

2  = :精确匹配

location = /dingwh/image/1.png {
     root /home; 
}

 3  ~* :匹配正则表达式,不区分大小写

#符合图片的显示 
location ~ \.(jpg|jpeg|gif) {
     root /home; 
}

 4 ~ :匹配正则表达式,区分大小写

#JPG大写才能匹配到 
location ~ \.(JPG|jpeg) {
     root /home; 
}

5 ^~ :以某个字符路径开头

location ^~ /dingwh/img {
     root /home; 
}

 

三、Nginx 日志切割-手动

1. 创建一个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` 

2. 为 cut_my_log.sh 添加可执行的权限:

chmod +x cut_my_log.sh

3. 测试日志切割后的结果:

./cut_my_log.sh

四、Nginx 日志切割-定时

1. 安装定时任务:

yum install crontabs 

2. crontab -e 编辑并且添加一行新的任务:

*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh 

3. 重启定时任务:

service crond restart 

4. 常用定时任务命令:

service crond start         //启动服务 
service crond stop          //关闭服务 
service crond restart       //重启服务 
service crond reload        //重新载入配置 
crontab -e                  // 编辑任务 
crontab -l                  // 查看任务列表 

5. 定时任务表达式:

Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:

 星期几年(可选)
取值范围0-590-231-311-121-72019/2020/..

6. 常用表达式:

#每分钟执行:
*/1 * * * * 
#每日凌晨(每天晚上23:59)执行:
59 23 * * * 
#每日凌晨1点执行:
0 1 * * *

五、Nginx跨域与防盗链

跨域:在server节点下配置

#允许跨域请求的域,*代表所有
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' *;

防盗链:在server节点下配置

#源站点验证,匹配当前域名及所有子域名
valid_referers *.dwh123.cn; 
#非法判断 
if ($invalid_referer) {
    return 404;
}

六、Nginx负载均衡-搭建tomcat集群

#配置上游服务器,即tomcat集群,默认轮训方式
#upstream name , name值自定义,需与location下proxy_pass参数值保持一致使用
upstream dingwh{ 
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
}

server {
    listen       80;
    server_name  www.dingwh.com;

    location / {
        #反向代理至tomcat集群
        proxy_pass http://dingwh; 
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

七、upstream 指令详解

1. weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均

upstream dingwh{ 
    server 192.168.1.101:8080 weight=5;
    server 192.168.1.102:8080 weight=1;
    server 192.168.1.103:8080 weight=10;
}

 

2. max_conns(最大连接数)

根据服务的性能来设置最大连接数,防止upstream服务器超载,默认值是0,表示没有限制。

upstream dingwh{ 
    server 192.168.1.101:8080 weight=5 max_conns=1000;
    server 192.168.1.102:8080 weight=1;
    server 192.168.1.103:8080 weight=10;
}

 

3. slow_start

设置服务器权重从0恢复到标准值的时间,默认值为0,缓慢的启动,该参数不能使用在 hash 和 random load balancing 中。
如果在 upstream 中只有一台 server,则该参数失效。

upstream dingwh{ 
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1;
    server 192.168.1.103:8080 weight=10;
}

 

4. max_fails、fail_timeout

max_fails:允许请求失败的次数

fail_timeout:max_fails次失败后,暂停的时间

默认:fail_timeout为10s,max_fails为1次。

max_fails=2 fail_timeout=20s 代表在20秒内请求失败2次,认为应用宕机,并等待下一个周期(时常fail_timeout)20s再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout)再试一次,如此循环直至可用

upstream dingwh{ 
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
    server 192.168.1.103:8080 weight=10;
}

5. down

标记服务节点不可用

upstream dingwh{ 
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
    server 192.168.1.103:8080 weight=10 down;
}

6. backup

 表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,才会加入到集群,被用户访问

upstream dingwh{ 
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
    server 192.168.1.103:8080 weight=10 backup;
}

7. ip_hash

保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。

注意点:不能把后台服务器直接移除,只能标记 down.

upstream dingwh{ 
    ip_hash;
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
    server 192.168.1.103:8080 weight=10 backup;
}

8. url_hash least_conn

url_hash : 根据每次请求的url地址,hash后访问到固定的服务器节点。

least_conn : 请求将被传递给当前拥有最少活跃连接的server,同时考虑权重weight的因素。即:选取活跃连接数与权重weight的比值最小者为下一个处理请求的服务

upstream dingwh{ 
    # url hash
    hash $request_uri;
    # 最少连接数
    least_conn;
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
    server 192.168.1.103:8080 weight=10 backup;
}

9. Keepalived

keepalived : 设置长连接处理的数量,可用于提高吞吐量

proxy_http_version :设置长连接http版本为1.1

proxy_set_header :清除connection header 信息

upstream dingwh{ 
    # url hash
    hash $request_uri;
    # 最少连接数
    least_conn;
    #长链接处理的数量
    keepalive 32;
    server 192.168.1.101:8080 weight=5 max_conns=1000 slow_start=60s;
    server 192.168.1.102:8080 weight=1 max_fails=2 max_fail_timeout=20s;
    server 192.168.1.103:8080 weight=10 backup;
}

server {
    listen       80;
    server_name  www.dingwh.com;

    location / {
        #反向代理至tomcat集群
        proxy_pass http://dingwh;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

八、 Nginx的反向代理缓存

nginx cache的配置:

使用proxy_cache_path来配置。Nginx对访问过的内容在本地建立副本,当再次访问时,Nginx无需再次向接口服务发起请求,可减少网络带宽,提升响应速度,即使后台服务宕机,也可访问缓存数据,提高服务可用性

upstream dingwh{ 
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
}

# 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;

server {
    listen       80;
    server_name  www.dingwh.com;

    location / {
        #反向代理至tomcat集群
        proxy_pass http://dingwh;
        # 启用缓存,和keys_zone一致
        proxy_cache mycache;
        # 针对200和304状态码缓存时间为8小时
        proxy_cache_valid 200 304 8h;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

九、 Nginx配置HTTPS域名证书

安装SSL模块

nginx中配置https,必须安装ssl模块,也就是: http_ssl_module 

进入到nginx的解压目录: /home/software/nginx-1.16.1

新增ssl模块(之前模块保留)

 ./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 \
--with-http_ssl_module

编译和安装

make

make install

配置HTTPS

ssl证书 *.crt 和 私钥 *.key 拷贝到nginx安装目录的conf目录下,即 /usr/local/nginx/conf 目录中。

腾讯云SSL证书下载后解压打开nginx证书配置,目录如下

监听443端口

server { 
    listen 443; 
    server_name www.dingwh.com; 

    # 开启ssl 
    ssl on; 

    # 配置ssl证书 
    ssl_certificate 1_www.dwh123.cn_bundle.crt; 

    # 配置证书秘钥 
    ssl_certificate_key 2_www.dwh123.cn.key; 

    # ssl会话
    cache ssl_session_cache shared:SSL:1m; 

    # ssl会话超时时间 
    ssl_session_timeout 5m;

    # 配置加密套件,写法遵循 openssl 标准 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        #反向代理至tomcat集群
        proxy_pass http://dingwh;
        # 启用缓存,和keys_zone一致
        proxy_cache mycache;
        # 针对200和304状态码缓存时间为8小时
        proxy_cache_valid 200 304 8h;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值