nginx虚拟主机配置文件(*.conf)

nginx.conf
#全局配置
user  nobody; 

worker_processes [number|auto]; #启动工作进程的数量一般设为和CPU核心数相同
worker_rlimit_nofile 65535 #worker进程所能打开的最多文件数量
pcre_jit on;  #正则表达式启用  加快正则表达式的处理速度
worker_cpu_affinity 00000001 00000010 00000100 00001000 | auto;
#将Nginx工作进程绑定到指定的CPU核心,默认Nginx是不进行进程绑定的,绑定并不是意味着当前nginx进程独占以一核心CPU,但是可以保证此进程不会运行在其他核心上,这就极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能
#若指定 worker_processes 的值为 auto, 则无法设置 worker_cpu_affinity
#通过命令查看 ps axo pid,cmd,psr | grep nginx

events {
    #worker_connections  409600;  #设置每一个 worker 进程可以并发处理的最大连接数。该值不能超过 worker_rlimit_nofile
    worker_connections  65535;
    multi_accept on;  
        #off:系统会逐个拿出新连接按照负载均衡策略,将其分配给当前处理连接个数最少的worker
        #on:系统会实时的统计出各个 worker 当前正在处理的连接个数,然后会按照“缺编” 最多的 worker 的“缺编”数量,一次性将这么多的新连接分配给该 worker
    use epoll; #设置worker 与客户端连接的处理方式
    #这是三种多路复用机制。select 与 poll 工作原理几乎相同,而epoll 的效率最高l    
}


http {
    .....
    include vhosts.conf; #包含文件    
    include conf.d/*.conf; #引用一下目录
}

80 vhosts.conf

server {
    listen       80;
    charset  utf-8;
    server_name  lren.org ;    
    root   d:/webroot/lren;
    client_max_body_size    500m; #上传文件大小

    location / {        
        index  index.html index.htm;
        if (-d $request_filename) {   #解决不加index.php,跨域报错问题
            rewrite ^(.*)?(.*)$ $1/index.php?$2 last; 
        }
        try_files $uri $uri/ @router;  #vue3路由 不能刷新问题
      }
      location @router {
          rewrite ^.*$ /index.html last;
      }  
    #php支持
    location ~ [^/]\.php(/|$) {
        fastcgi_pass   php:9000; 
        include        fastcgi_params;
    }
    #文件添加跨域访问支持
    location ~* \.(m3u8|ts|eot|ttf|woff|svg|otf|jpg|png|gif)$ {
         add_header Access-Control-Allow-Origin *;
    }
}

443 vhosts.conf

server {
    listen              443 ssl default http2; #http2支持
    server_name         study-cdn.jobpi.cn;
    charset  utf-8;
    root  /data/www;
    client_max_body_size    500m;

    ssl_certificate     /ssl/jobpi.cn.pem;
    ssl_certificate_key /ssl/jobpi.cn.key;
    ssl_ciphers         HIGH:!aNULL:!MD5; #HIGH表示使用安全性高的加密套件,!aNULL 排除掉没有认证的交的算法 !MD5排除掉md5的加密套件
    ssl_ciphers         HIGH:!aNULL:!MD5:!LOW:!3DES:!DES ;  #禁用低版本 md5, des等套件
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; 

    ssl_prefer_server_ciphers on;
    ssl_session_timeout  5m;

    #server_name_in_redirect off;  #开启或关闭nginx将server_name指令指定的首要虚拟主机名用于发起的绝对重定向
    #port_in_redirect off;

    location / {        
        index  index.php index.html index.htm;
        if (-d $request_filename) {   #解决不加index.php,跨域报错问题
            rewrite ^(.*)?(.*)$ $1/index.php?$2 last; 
        }
    }        
    location ~ [^/]\.php(/|$) {
        fastcgi_pass   php:9000;
        include        fastcgi_params;
    }
    location ~* \.(m3u8|ts|eot|ttf|woff|svg|otf|jpg|png|gif)$ {
         add_header Access-Control-Allow-Origin *;
    }
}

upstream配置方法

upstream crmqcjspxyun8502{
    #ip_hash; #负载方式  
    server 172.17.214.105:8501;
    #server 172.17.214.104:8501 weight=1; #权重
    #server 172.17.214.105:8501 weight=2;
}

server {
    listen              80;
    server_name         www.xxx.com;
    charset  utf-8;
    location / { 
        #proxy_pass  http://172.17.214.106:8501; #直接引用
        proxy_pass  http://crmqcjspxyun8502; #通过upstream
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

启用range

Nginx支持Range请求。Range请求是一种HTTP协议中用于下载大文件或断点续传的机制。当客户端发送带有Range头部字段的请求时,服务器可以返回指定范围的响应内容,而不是整个文件

location / {
    # 启用Range请求支持
    range_filter on;
    range_header on;
}

防盗链

server {
    location ~* \.(gif|jpg|png)$ {
        valid_referers none blocked *.xxx.cn;
        if ($valid_referers) {
            return 403;
        }
    }
    ...
}

手机端重定向

server {
    location / {
        if ($http_user_agent ~* '(android|iphone|ipad)') {
            rewrite ^/(.*)$ https://m.xxx.cn/$1;
        }

        if ($http_user_agent ~* '(android|iphone|ipad)') {
            rewrite ^.*$ https://admission.lvu.edu.cn/h5/index.html;
        }

    }

}

手机端重定向方法二

http {
    map $http_user_agent $is_mobile {
        default         0; # 默认为0,表示电脑
        ~*android|iphone|ipad 1; # 如果User-Agent包含这些关键字,则为1,表示手机
    }

    server {
         location / {
            if ($is_mobile) { # 如果是手机,重定向到手机版网站
                return 302 http://m.example.com$request_uri;
            }
            ....
         }
    }
}