Nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件。
支持高并发,能支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o事件模型epoll
root用户下安装nginx,非root用户下的nginx监听80端口的实现
注:系统版本 centOS 7.5
一、nginx的安装(两个安装教程选一个即可)
CentOS7 安装Nginx CentOS7.3安装Nginx 1.7.4
注:最后安装nginx时,如需指定安装目录 --prefix=目录
./configure --prefix=/juwenzhe/nginx --with-pcre=/usr/src/pcre-8.42 --with-openssl=/usr/src/openssl-1.1.1a --with-zlib=/usr/src/zlib-1.2.11
二、实现目的(目标)
1.实现 HTTP+IP 跳转到非root用户下启动的Nginx(18081)
三、实现过程(CentOS 7.5 VM)
1.查看端口映射表
命令:iptables -t nat -vnL
2.清空端口映射表
命令:iptables -t nat -F
3.使用sysctl确保启用IP FORWARD功能 [此功能在Red Hat/CentOS默认是被禁用的]
命令:sysctl -w net.ipv4.ip_forward=1 (重启失效)
4.如果要长久保存,需要在/etc/sysctl.conf文件内修改:
net.ipv4.ip_forward=1
再从文件中加载新的配置:
sysctl -p /etc/sysctl.conf
5.端口映射(重定向端口)
命令:iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT --to-port 18081
+.如果想取消端口映射[回退],运行第2条命令即可
四、Nginx服务集群简单实现(轮询)--详细参考附录
1.配好四台虚拟机的网络
2.一台nginx服务器,一台Tomcat应用服务器,两台资源服务器
nginx.conf配置:
user yourname yourname;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 2048;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
multi_accept on;
}
http {
#设定mime类型,类型有mime.type文件定义
include mime.types;
default_type application/octet-stream;
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 logs/access.log main;
sendfile on;
tcp_nopush on;
#nginx网络设置
#keepalive_timeout 0;
keepalive_timeout 65;
#防止网络阻塞,提高数据实时响应性能
tcp_nodelay on;
#设置客户端请求头大小,一般不超过1k,可以设置为页的大小=getconf PAGESIZE
client_header_buffer_size 4k;
#打开文件缓存数=nginx进程最大打开文件数worker_rlimit_nofile;
open_file_cache max=2048 inactive=20s;
#检查缓存有效信息间隔
open_file_cache_valid 30s;
#在缓存中20秒内至少使用的次数,超过这个次数才不会被清除
open_file_cache_min_uses 1;
#设置请求头超时时间,超过这个时间没有发数据,nginx返回请求超时错误
client_header_timeout 15;
#设置请求内容超时时间
client_body_timeout 15;
#设置关闭不响应客户端的链接,释放内存空间
reset_timedout_connection on;
#响应客户端超时时间,超过这个时间,超过这个时间客户端没有活动,nginx关闭连接
send_timeout 15;
#关闭在错误页面中的nginx版本数字,对于安全性是有好处的
server_tokens off;
#上传文件大小限制
client_max_body_size 10m;
#更多参数调优见:
#更多参数调优:https://wenku.baidu.com/view/4011c9de7cd184254b3535d3.html?sxts=1544254246249
upstream tomcats{
server 192.168.31.141:8089;
server 192.168.31.141:8090;
server 192.168.31.141:8091;
server 192.168.31.141:8092;
}
server {
listen 18082;
#根据这个域名或者ip可以访问到这个虚拟主机
server_name localhost www.tmedu.com;
location ~* \.(mp4)$ {
#valid_referers none blocked www.tmedu.com 192.168.31.121;
root resource\Hallelujah.mp4;
access_log on;
}
}
server {
listen 18081;
#根据这个域名或者ip可以访问到这个虚拟主机
server_name localhost www.tmedu.com;
location / {
#添加错误请求页面
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#设置转发请求头为当前虚拟主机ip
proxy_set_header Host $host;
#带上层真实访问客户端IP
proxy_set_header X-Real-IP $remote_addr;
#继续传递真实请求IP
proxy_set_header X-forwarded-For $proxy_add_x_forwarded_for;
#转发请求到tomcat集群
proxy_pass http://tomcats;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
附一:Nginx学习相关参考文档
附二:centOS7.5网络配置(/etc/sysconfig/network-scripts/ifcfg-ens33)
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens33
UUID=0832c3f5-f6a2-4d65-b378-b98ddf9f2f0b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.131
NETMASK=255.255.255.0
GATEWAY=192.168.31.2
DNS1=192.168.31.0
DNS2=8.8.8.8
附三:centOS7.5图形化界面设置
想修改为多用户状态只需执行:
systemctl set-default multi-user.target
修改为图形界面执行:
systemctl set-default graphical.target