superleeyom / blog

:bookmark: 个人博客仓库,用于记录一些幼稚的想法和脑残的瞬间,欢迎 star、watch,该仓库为个人博客,请不要提 issue ,该仓库后端参考了 @yihong0618 的 gitblog 项目,前端参考了@LoeiFy 的 Mirror 项目,感谢!
https://blog.leeyom.top
221 stars 20 forks source link

nginx基础指令及初始配置解析 #4

Open superleeyom opened 4 years ago

superleeyom commented 4 years ago

nginx 常用命令

nginx docker 相关指令

nginx 默认配置文件解析

# 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限
user  nginx;
# worker进程工作数设置,一般来说CPU有几个,就设置几个
worker_processes  1;

# 设置日志级别,debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大
error_log  /var/log/nginx/error.log warn;
# 设置nginx进程 pid
pid        /var/run/nginx.pid;

# 设置工作模式
events {
    # 每个worker允许连接的客户最大连接数
    worker_connections  1024;
}

# http 是指令块,针对http网络传输的一些指令配置
http {
    # include 引入外部配置,提高可读性,避免单个配置文件过大
    include /etc/nginx/mime.types;
    # 设置HTTP默认的 content-type
    default_type  application/octet-stream;
    # 设置日志格式,各项含义如下:
    # $remote_addr:客户端ip
    # $remote_user:远程客户端用户名,一般为:’-’
    # $time_local:时间和时区
    # $request:请求的url以及method
    # $status:响应状态码
    # $body_bytes_send:响应客户端内容字节数
    # $http_referer:记录用户从哪个链接跳转过来的
    # $http_user_agent:用户所使用的代理,一般来时都是浏览器
    # $http_x_forwarded_for:通过代理服务器来记录客户端的ip
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    # sendfile 使用高效的文件传输,提升传输性能,启用后才能使用tcp_nopush,指当数据表累积到一定的大小后才发送,提高效率
    sendfile        on;
    #tcp_nopush     on;

    # 设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗
    keepalive_timeout  65;

    # 开启gzip压缩功能,提高传输效率,节约带宽
    #gzip  on;

    # include 引入外部配置,提高可读性,避免单个配置文件过大
    include /etc/nginx/conf.d/*.conf;
}

root 与 alias

假如服务器路径为:/home/leeyom/files/img/header.png

location 的匹配规则

nginx 跨域配置

server 块里面增加:

# 允许跨域请求的域,*代表允许所有的域
add_header 'Access-Control-Allow-Origin' *;
# 允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
# 允许请求的header,比如:Authorization,Content-Type,Accept,Origin,User-Agent 等
add_header 'Access-Control-Allow-Headers' *;
# 允许请求的方法,比如:GET、POST、PUT、DELETE
add_header 'Access-Control-Allow-Methods' *;

nginx 防盗链

# 对源站点进行验证(白名单),多个域名用空格隔开
valid_referers *.leeyom.com;
# 非法访问则返回403
if($invalid_referer){
    return 403;  
}

nginx 搭建 Tomcat 集群简版配置

upstream tomcats {
  server 192.168.1.174:8080;
  server 192.168.1.175:8080;
  server 192.168.1.176:8080;
}
server {
  listen 80;
  server_name www.tomcats.com;
  location / {
    proxy_pass: http://tomcats;
  }
}

访问www.tomcats.com,将以轮询方式,分别访问三台 Tomcat,当然也可以使用加权轮询,例如:

server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=2;
server 192.168.1.176:8080 weight=5;

weight的值越大,当前服务器的 Tomcat 被访问的几率越大。

upstream 指令

server 192.168.1.174:8080 max_conns=2;
server 192.168.1.175:8080 max_conns=2;
server 192.168.1.176:8080 max_conns=2;
server 192.168.1.174:8080 weight=1;
server 192.168.1.175:8080 weight=2;
server 192.168.1.176:8080 weight=5 slow_start=60s;

Keepalived 提高吞吐量

upstream tomcats {
  server 192.168.1.174:8080;
  server 192.168.1.175:8080;
  server 192.168.1.176:8080;
  # 设置长连接处理的数量
  keepalive 32;
}
server {
  listen 80;
  server_name www.tomcats.com;
  location / {
    proxy_pass: http://tomcats;
    # 设置长连接http的版本号
    proxy_http_version 1.1;
    # 清除 connection header 信息
    proxy_set_header Connection "";
  }
}

nginx的反向代理缓存

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

配置ssl证书

  1. 安装 ssl 模块

  2. 将 ssl 证书*.crt和私钥*.key拷贝到/usr/local/nginx/conf目录中

  3. 新增 server 监控 443 端口:

    server{
     listen 443;
     server_name www.leeyom.me;
     # 开启ssl
     ssl on;
     # 配置ssl证书
     ssl_certificate yourdomain.com.crt;
     # 配置证书秘钥
     ssl_certificate_key yourdomain.com.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-G
    }