玖叶教程网

前端编程开发入门

Nginx无脑小白教程之配置篇(nginx简单配置)

1.Nginx配置

nginx.conf配置文件:

# 工作进程数量
worker_processes  4;
# 单进程能打开的最大文件描述符数量
worker_rlimit_nofile 65535;
events {
    #使用epoll的I/O模型
    use epoll;
    # 工作进程的最大连接数量
    worker_connections  1024;    
    
}

# 流式转发配置
stream {
...
}
  • worker_processes
    Nginx 的进程数,建议按照CPU的个数或者是核心数量设定。nginx 1.3.8以后版本, 如不设定, 默认值会设为自动检测的cpu核心数。
  • worker_rlimit_nofile
    一个nginx 进程打开的最多文件描述符数量,性能要求较高的场景下, 建议与ulimit -n 保持一致, 理论上是ulimit数 / Nginx进程数, 但是Nginx 分配并不均匀, 可以略多一些。
  • use epoll
    采用epoll的I/O模型, 适合高并发场景,基于linux内核2.6+版本。
  • worker_connections
    每个Woker工作进程所能处理的最大连接数。注意,worker_connections 不能超过 worker_rlimit_nofile数量。

2.Nginx配置示例

# 工作进程数量
worker_processes  4;
# 单进程能打开的最大文件描述符数量
worker_rlimit_nofile 65535;
events {
    #使用epoll的I/O模型
    use epoll;
    # 工作进程的最大连接数量
    worker_connections  1024;    
    #空闲连接有效保持时间(秒)
    keepalive_timeout 60;
}

# http转发配置
http{
	# 编码设置
    charset utf-8;
	#最大上传的文件大小
    client_max_body_size 64m;
    # 文件传输模式(采用zero copy零拷贝方式), 如果I/O过于频繁,比如文件/图片服务器, 可以将其关闭,减少系统负载
    sendfile on;
    # http长连接空闲存活时间(秒)
    keepalive_timeout 120;
	# 服务信息配置(默认轮询策略, 支持weight和ip_hash等方式)
	upstream bserver{
		server 192.168.168.100:10840; 
		server 192.168.168.101:10850 ; 
	 } 
	# 主机服务配置
	server {
		# 监听端口
		listen	10851;
		#服务域名,可以映射多个, 空格分隔
		server_name  localhost;	
		# 路径访问配置, 针对具体路径配置(支持正则匹配, 
		# 例: ^~ /images/*.(gif|jpg|jpeg) 意思是匹配/images开头,指定格式的图片请求, ~ 为区分大小写, !~为不区分大小写匹配)
     	location /loginApi { 
     		# 路径重写, 将/loginApi请求全部重写, 前面附加/user, 示例: /loginApi/validate -> /user/loginApi/validate
     		# break 代表浏览器地址不变, 为内部跳转
     		rewrite ^/loginApi(.*)$ /user/loginApi$1 break; 
     		# 代理转发的服务
     		proxy_pass http://bserver;
     		#头部信息设置, 添加主机信息
     		proxy_set_header Host $host:$server_port;
     		# 头部信息设置, 添加IP信息
     		proxy_set_header X-Real-IP $remote_addr;
     		# 头部信息设置, 添加转发IP信息
     		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     		
     	}
     }	

}

3.Nginx流式Stream配置

Nginx不仅可以支持http的代理, 也可以支持Mysql集群的流式访问代理, 在实现配置之前,
要确保Nginx的Stream插件已安装, 安装配置参数 --with-stream=dynamic
完整配置命令:

 ./configure --prefix=/usr/local/nginx   --conf-path=/usr/local/nginx/nginx.conf  --with-http_ssl_module   --with-http_realip_module  --with-stream=dynamic

如果之前没有安装, 不用重装Nginx, 重新执行configure命令, 然后执行make命令即可, 不需执行
make install, 再将编译好的Nginx执行文件覆盖:

# 先停止服务
/usr/local/nginx/sbin/nginx -s stop
# 覆盖Nginx执行文件
cp  /usr/local/nginx/objs/nginx /usr/local/nginx/sbin/
# 启动Nginx服务
/usr/local/nginx/sbin/nginx -s start

主要配置如下:

...

# 流式服务转发配置
stream {
	# 服务信息配置, 这里配置的是MySQL服务集群的节点信息
    upstream mysql_cluster {
        server 10.10.20.25:3306;
        server 10.10.20.26:3306;
        server 10.10.20.27:3306;
    }

	# 主机服务配置
    server {
    	# 监听端口
        listen       13306;
        # 代理转发的服务, 直接指向上面配置的服务名称
        proxy_pass mysql_cluster;

    }

}

4. 多层nginx代理如何获取真实IP

实际生产环境的部署会比较复杂, 一个请求可能会经过多个Nginx代理, 需要做多层转发配置, 否则会丢失客户端的IP信息。
确保已安装reaip模块, 配置命令: --with-http_realip_module 如果没有安装, 参考上面的增加插件处理方法。

...
server {
...
	real_ip_header X-Forwarded-For; 
	set_real_ip_from 192.168.168.0/24; 
	real_ip_recursive on;
...

}
  • 采用realip插件, remote_addr输出为真实客户端IP, 使用remoteaddr输出为真实客户端IP,使用realip_remote_addr获取最后一个反向代理的IP。
  • set_real_ip_from 192.168.168.0/24: 代表哪些是反向代理的IP,这里通过网段范围来配置, 如果还有其他内部的网段, 可以都配置上去。
  • real_ip_recursive on: 代表是否递归解析, 如果关闭, Nginx会从real_ip_header中取最后一个IP作为客户端的真实IP, 开启代表递归解析real_ip_header, 直到最后一个不匹配set_real_ip_from的IP作为真是的客户端IP。

5. Nginx的SSL加密访问配置

这里实现了SSL服务配置, 以及80端口重定向至443加密访问配置:

...
upstream bserver{
	server 192.168.168.100:10840; 
	server 192.168.168.101:10850 ; 
 } 
 
# SSL服务配置
server {
	#监听端口, 一般为443
	listen 443;
	# 服务访问域名配置
	server_name testssl.com;
	# 证书路径配置
	include /opt/cert/testssl.com.conf;
	# 请求路径配置, 这里配置的是所有请求路径
	location / { 
		# 重定向配置, 将http配置重定向为https请求
		proxy_redirect http:// https:// ;
		# 转发的具体服务
		proxy_pass http://bserver;
		# 连接超时时间配置
		proxy_connect_timeout 180s;
		# 发送超时时间配置
        proxy_send_timeout   180s;
        # 数据接收超时时间配置
        proxy_read_timeout   300s;
        # 日志存储位置
        access_log /var/log/nginx/testssl.access.log main;
	}

# 将普通http的80端口访问自动重定向至https加密访问
server {
	#监听端口
	listen 80;
	# 服务访问域名配置
	server_name testssl.com;

	# 请求路径配置, 这里配置的是所有请求路径
	location / { 
		# 头部信息设置, 增加 X-Forwarded-For
		proxy_set_header   X-Forwarded-For  $remote_addr;
		# 头部信息设置, 增加X-Real-IP
        proxy_set_header  X-Real-IP  $remote_addr;
        # 头部信息设置, 增加X-Forwarded-Host 
        proxy_set_header  X-Forwarded-Host $server_name;
         # 头部信息设置, 增加Host 
        proxy_set_header Host $host;
		# 将所有请求, 重写为https加密方式访问 (重点)
		rewrite ^(.*)$ https://$server_name$1 permanent;
		# 连接超时时间配置
		proxy_connect_timeout 180s;
		# 发送超时时间配置
        proxy_send_timeout   180s;
        # 数据接收超时时间配置
        proxy_read_timeout   300s;
        # 日志存储位置
        access_log /var/log/nginx/testssl.access.log main;
	}

6. Nginx的VUE项目部署

一般VUE前端是在本地开发调试, 如果部署在服务端, 采用绝对路径访问, 会出现跨域等问题, 可以通过Nginx反向代理来解决此问题, 前端服务配置为相对路径访问即可.

...
 server {
        listen       20008;
        server_name  test.com;


        location / {
            add_header Access-Control-Allow-Origin *;
            root   /usr/local/front_servers/admin;
            index  index.html index.htm;
        }

        location ^~ /admin/ {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            rewrite ^/admin/(.*)$ /admin/$1 break;
            proxy_pass http://192.168.0.128:10680/;

        }

    }
...

7. Nginx的WebSocket连接配置

    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    upstream websocket {
        server 192.168.0.180:20001;
    }
    # 要连接的目标WS服务, ws://192.168.0.180:20001/stock
    location /stock {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            # 请求头增加, Upgrade: websocket 
            proxy_set_header Upgrade $http_upgrade;
            # 请求投增加, Connection: upgrade
            proxy_set_header Connection $connection_upgrade;
     }

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言