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