Nginx在线运行系统之实战配置

本文以实际运行系统的nginx.conf配置来讲述配置参数,涉及基本配置、负载均衡、SSL、多域名、配置片段、微信文件动态验证、升级自动提示、防域名劫持等各种实战实际情况。当然为了保密,配置中用到的ip地址、端口、域名等均是示例化处理。
Nginx安装配置网上很多,在此步就不赘叙了。

Nginx配置文件位置

nginx.conf是默认配置文件。
Yum安装的通常在/etc/nginx下。
编译安装通常在“指定目录(/usr/local)/nginx/conf”下。

Nginx配置文件结构

nginx配置文件结构比较简单,无论实际配置有多少,实际只有如下几部分:
全局配置
连接配置
http{ #http模块
#公共配置
upstream lb1 { #负载均衡配置(可选,单服务器时不需要)

}
server{ #服务器配置

}
}

配置实战文件解析

#运行用户
user nobody;
#pid文件
pid logs/nginx.pid;
#NGINX运行worker数量,一般设置为可用的vCPU(内核数),auto为自动检测
worker_processes 4;
#worker进程打开最大文件数,受限于系统上可用的文件描述符的数量,不设置即为系统的nofile数量
worker_rlimit_nofile 65536;
#全局错误日志
error_log  logs/error.log;

#连接配置: events模块中包含nginx中所有处理连接的设置
events {
    #worker进程同时打开的最大连接数,需满足worker_rlimit_nofile>= worker_connections*worker_process
    worker_connections 16384;
    #告诉nginx收到一个新链接通知后接受尽可能多的链接
    multi_accept on;
    #设置用于复用客户端线程的轮训方法
    use epoll;
}

http {
    #include指在当前文件中包含另一个文件内容
    include mime.types;
    #设置文件使用默认的mine-type
    default_type  application/octet-stream;
    #设置默认字符集
    charset UTF-8;

    #允许客户端请求的最大单文件字节数(涉及上传文件等需要配置)
    client_max_body_size 30m;
    #(请求行+请求头)的大小不能超过32k
    client_header_buffer_size 32k;

    #日志格式(通常采用默认即可)
	#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #优化磁盘IO设置,指定nginx是否调用sendfile函数来输出文件,普通应用设为on,下载等磁盘IO高的应用,可设为off
    sendfile on;
    #设置nginx在一个数据包里发送所有头文件,而不是一个接一个的发送
    tcp_nopush on;

    #给客户端分配keep-alive链接超时时间(单位秒),一般等于http端的超时时间,如果存在较长时间响应的服务,应该加大
    keepalive_timeout 60;

    #是否开启nginx采用gzip压缩的形式发送数据。通常减少发送数据量,就会增加请求处理时间及CPU处理时间,需要权衡
    gzip on;
    #加vary给代理服务器使用,针对有的浏览器支持压缩,有个不支持,根据客户端的HTTP头来判断是否需要压缩
    gzip_vary on;
    #nginx在压缩资源之前,先查找是否有预先gzip处理过的资源
    #!gzip_static on;
    #为指定的客户端禁用gzip功能,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip_disable "MSIE[1-6]\.";
    #允许或禁止压缩基于请求和相应的响应流,any代表压缩所有请求
    gzip_proxied any;
    #设置对数据启用压缩的最少字节数,如果请求小于10240字节则不压缩,会影响请求速度
    gzip_min_length 10240;
    #设置数据压缩等级,1-9之间,9最慢压缩比最大
    gzip_comp_level 2;
	#压缩文件使用缓存空间的大小 number指定Nginx服务器需要向系统申请缓存空间的个数,size指定每个缓存空间的大小
    gzip_buffers 32 32K;
    #设置需要压缩的数据格式
    gzip_types text/plain text/css text/xml text/javascript  application/json application/x-javascript application/xml application/xml+rss; 

	######################业务应用端配置######################
	#负载均衡服务器组
    upstream lb_bz { 
	    #后端服务器访问规则
		#ip_hash基于用户的IP地址进行hash算法,保证了某一类请求只会由某一台服务去处理
		#fair该算法根据后端服务器节点的响应时间来分配,响应时间短的优先分配
		#least_conn该算法根据后端节点的连接数决定分配请求,哪个机器连接数少,就发给谁
        ip_hash;
        #weight参数表示权重值,权值越高被分配到的几率越大
        server  192.168.14.75:49100  weight=5; 
        server  192.168.14.76:49100; 
    }
	server {
        #监听80端口(标准http协议端口)
        listen       80;
        #访问域名
        server_name  bzop.bzdomain.com bzapi.bzdomain.com;
		#把所有http转换为https链接进行访问
        rewrite ^(.*)$ https://$host$1;
    }
    server {
        #监听443端口(标准https协议端口)
        listen       443 ssl;
        #访问域名
        server_name  bzop.bzdomain.com bzapi.bzdomain.com;
        #设定本服务主机的访问日志
        access_log  /usr/local/nginx/logs/bz.access.log;
	
	    #一级域名bzdomain.com的ssl配置(此处ssl证书配置,以ssl证书申请方给出的配置方法为准)
        include /usr/local/nginx/nginx.ssl.bzdomain.item;

        #用片段方式进行跨域配置,配置在另一文件中,主要在多处有同样配置用到
        include /usr/local/nginx/conf/nginx.cors.item;

        #微信验证文件
        location = /MP_verify_W9p2EqvyJ0i841o7.txt {
            root /usr/local/nginx/html/;
        }
        #动态验证微信验证文件(此处用于验证系统用户的公众号,系统用户自己上传认证文件)
        location ~ /MP_verify_.+\.(txt)$ {
            rewrite ^/(.*)$ /weChatVerify/getFile?fileName=$1;
        }

        # 语法规则:location [=|~|~*|^~] /uri/ {...} 先匹配普通location,在匹配正则location
        # = 开头表示精确匹配
        # ^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可,无需考虑编解码
        # ~ 开头表示区分大小写的正则匹配
        # ~* 开头表示不区分大小写的正则匹配
        # !~ 开头表示区分大小写的不匹配的正则
        # !~* 开头表示不区分大小写的不匹配的正则
        # / 通用匹配,任何请求都会被匹配到
        location / {
		    #代理转发负载均衡服务器
            proxy_pass        http://lb_bz;
            #下面三个配置都是让后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header  Host            $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
		
		#后台升级时,用户访问自动提示(改写了502)
		error_page  502 /502.html;
		location = /502.html {
			root   /usr/local/nginx/html;
		}
    }

	######################管理端配置######################
    server {
        listen       80;
        server_name  bzmg.bzdomain.com;
        rewrite ^(.*)$ https://$host$1;
    }
    server {
        listen       443 ssl;
        server_name  bzmg.bzdomain.com;
        access_log  /usr/local/nginx/logs/mg.access.log;

	    #一级域名bzdomain.com的ssl配置(此处ssl证书配置,以ssl证书申请方给出的配置方法为准)
        include /usr/local/nginx/nginx.ssl.bzdomain.item;

        #跨域配置
        include /usr/local/nginx/conf/nginx.cors.item;

        location / {
            proxy_pass        http://192.168.14.75:49105;
            proxy_set_header  Host            $host;
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
	    }

		#后台升级时,用户访问自动提示(改写了502)
		error_page  502 /502.html;
		location = /502.html {
			root   /usr/local/nginx/html;
		}
    }
	
	#加载其它域名配置
	include /usr/local/nginx/conf.d/*.conf;

	######################防止域名被恶意解析######################
    server {
        listen       80;
        listen       443;
        server_name  "";
        return  444;
    }
}

为了方便您的理解,我打包了所有配置文件,有需要可在这里下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值