nginx


nginx主配置文件(/etc/nginx/nginx.conf)

user  nginx;     ## nginx启动用户
worker_processes  auto;  ## nginx woker 的进程数量(和cpu核心数有关系)

error_log  /var/log/nginx/error.log notice; ## 报错日志存放位置
pid        /var/run/nginx.pid; ## nginx master的进程pid文件路径(里面存放pid号)


events {
    worker_connections  1024;# worker进程运行连接的最大连接数(max 65535)
	 use epool; # 使用epool的高效处理大并连接(select)
}


include /etc/nginx/stream.d/*.conf;  ## 包含stream.d/*.conf的文件内容

http {
    include       /etc/nginx/mime.types; #包含 /etc/nginx/mime.types;
    default_type  application/octet-stream;
    # 如果请求中没有文件类型 nginx会默认使用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"';
                      ## 定义了一个日志格式 main

    access_log  /var/log/nginx/access.log  main; ## 日志存放位置和 格式main

    sendfile        on; # 启动了sendfile模式将文件内容从磁盘直接发送到客户端
    #tcp_nopush     on;

    keepalive_timeout  65; ## 超时时间 65s

    #gzip  on; ## 压缩传输

    include /etc/nginx/conf.d/*.conf; ## 包含/etc/nginx/conf.d/*.conf
}

server层

用于定义虚拟主机的配置
用于处理客户端的http请求
server{
	listen 80;
	# 通过listen指令指定了服务器监听的端口号
	server_name 172.16.1.7;
	# 通过server_name制定所匹配的主机名/IP地址
	location /{
	# 针对不同路径的url路径的处理规则
	}
}

location层

针对不同路径的url路径的处理规则

location ~ \.php$ {   ### 所有root 根下.php 走location
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_param SCRIPT_FILENAME
	$document_root$fastcgi_script_name;
	include fastcgi_params;
}

location ~* .*\.(jpg|png|gif)$ { # 所有root 根  后面跟着图片走location
	root /code/images;
}

upstream **层

upstream web {     # 定义一个组 名为web 下面有两台机器和各自的端口
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

stream层

stream {   ## 与http同级别  只能存在一个  
	upstream lb{  ## 定义组
	server 172.16.1.5:22;
	}
server{
	listen 90;  ## 端口
	proxy_pass lb;  ## 组
	}
}

## 实现端口数据的转发    

优化文件(proxy_params)

#####  proxy_params  ######
proxy_set_header Host $http_host;
## 带着域名头去访问(负载均衡所设置的域名头)
proxy_set_header X-Real-IP $remote_addr;
## 通常用于传递客户端的真实 IP 地址。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
## 头部包含了所有代理服务器和客户端的 IP 地址,从最初的客户端 IP 地址开始,经过每个代理服务器,依次追加。
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

nginx反向代理

server{
listen 80;
	server_name lb.web.com;
	location / {
	proxy_pass http://172.16.1.7:80;
	include proxy_params;
	}
}
nginx定义了一个虚拟主机
将来自域名为lb.web.com的http请求
转发给后端服务器的http://172.16.1.7:80

nginx的七层负载(应用层)

pstream web {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}
server{
	listen 80;
	server_name lb.web.com;
	location / {
		proxy_pass http://web;
		include proxy_params;
		}
}

定义了一个负载均衡虚拟主机
收到了来自lb.web.com的请求的时候
nginx会通过负载均衡机制 rr
将请求转发给web的主机池

nginx四层负载(传输层)

stream {
	upstream lb{
		server 172.16.1.5:80;
	}
	server{
		listen 90;
		proxy_pass lb;
	}
}
来自客户端的对于端口90的连接请求
通过代理方式转发给172.16.1.5:80这个服务器
指定存在一个  和http同级别

nginx的静态页面

server{
	listen 80;
	server_name pic.xxx.com;
	root /code;
	index index.html;
	location ~* .*\.(jpg|png|gif)$ {
		root /code/images;
		}
}
pic.xxx.com  --->读取、code/index.html
pic.xxx.com/.jpg/.png/.gif  ----->读取 /code/images/*(.jpg|.png|.gif)

nginx动态页面

## 调用数据库的  
upstream static {
	server 172.16.1.7:80;
}
upstream java {
	server 172.16.1.8:8080;
}
server {
	listen 80;
	server_name pic.xxx.com;
	location / {
		root /code;
		index index.html;
	}
	location ~* \.(jpg|png|gif)$ {
	proxy_pass http://static;
	proxy_set_header Host $http_host;
	}
	location ~ \.jsp$ {
	proxy_pass http://java;
	proxy_set_header Host $http_host;
	}
}

正常的走index.html
图片结尾 ----  172.16.1.7:80
动态页面 ----  172.16.1.8:8080

资源整合(Iphone,Android,pc)

upstream pc{
	server 172.16.1.6:80;
}
upstream andriod{
	server 172.16.1.8:80;
}
upstream ios{
	server 172.16.1.7:80;
}
server{
	listen 80;
	server_name fl.web.com;
	location /{
	if ($http_user_agent ~* "Android") { ### 判断用户返回数据是否含有Android字符
		proxy_pass http://andriod;
	}
	if ($http_user_agent ~* "Iphone") {
		proxy_pass http://ios;
	}
	proxy_pass http://pc;

	}
}

nginx重定向配置

server{
	listen 80;
	server_name rewrite.web.com;
	root /code;
	index index.html;
	location /test{
		rewrite ^(.*)$ http://www.baidu.com redirect;
	}
}
rewrite.web.com/test  ---- >  http://www.baidu.com

redirect ----> 返回302 临时重定向
permanent ----> 返回301  永久重定向

nginx的https相关

## 生成server.key的相关文件
openssl genrsa -idea -out server.key 2048

##  生成 server.crt
openssl req -days 36500 -x509 \
> -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

### 注意
Common Name (eg, your name or your server's hostname) []:www.web.com # 域名 确保和
配置文件一致

## 设置https
server{
	listen 443 ssl;
	server_name www.web.com;
	root /code;
	index index.html;
	charset utf-8;
	ssl_certificate /etc/nginx/ssl_key/server.crt; ## 指定路径
	ssl_certificate_key /etc/nginx/ssl_key/server.key; ## 指定路径
}

nginx相关模块

#################### (autoindex)配置目录索引模块 #######################
Syntax: autoindex on | off;
Default:
autoindex off;                   #(on显示精准大小|off显示大概大小)
Context: http, server, location  #(可以所在层级)

server{
	listen 80;
	server_name 10.0.0.7;
	root /test;
	autoindex on;
}

################### (autoindex_format)页面显示格式 ####################
Syntax: autoindex_format html | xml | json | jsonp;
Default:
autoindex_format html; # 默认显示格式 (json和jsonp差不多)
Context: http, server, location
server{
	listen 80;
	server_name 10.0.0.7;
	root /test;
	autoindex on;
	autoindex_exact_size on;
	autoindex_format xml;
}

#####################(autoindex_localtime)时间显示模式 #################
Syntax: autoindex_localtime on | off;
Default:
autoindex_localtime off;
Context: http, server, location
on 现实的是找点目录下文件的属性时间
off 显示的是格林威治时间
server{
	listen 80;
	server_name 10.0.0.7;
	root /test;
	autoindex on;
	autoindex_exact_size on;
	autoindex_format html;
	autoindex_localtime on;
}

#################(stub_status)nginx状态模块 ###############
Active connections: 2 		# 当前活动的连接数
accepts 					# 当前总的连接数 tcp 4
handled 						# 成功的连接数数 4
requests 						# 总的http的请求书数目 51
4 4 51
Reading: 0 # 请求
Writing: 1 # 响应
Waiting: 1 # 等待的请求数

server{
	listen 80;
	server_name 10.0.0.7;
	root /test;
	autoindex on;
	autoindex_exact_size on;
	autoindex_format html;
	autoindex_localtime on;
	location = /aaa { 		## 在10.0.0.7/aaa 指定这个
	stub_status;      		## 开启的关键
}

########################(auth_basic)密码限制网页 #################
Syntax: auth_basic string | off;
Default:
auth_basic off;
Context: http, server, location, limit_except

# 安装htpasswd
yum install -y httpd
# 创建认证相关的目录
mkdir /etc/nginx/auth
# 创建密码文件
htpasswd -b -c /etc/nginx/auth/xxx.auth xxx 123
-b # 允许命令行输入密码
-c # 创建一个新文件

# 修改配置文件
server{
	listen 80;
	server_name 10.0.0.7;
	root /test;
	index index.html;
	location = /aaa {
		stub_status;
		auth_basic "input your username & password";
		auth_basic_user_file /etc/nginx/auth/xxx.auth;
	}
}

############(syntax)用户访问限制 ###############
Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
Syntax: deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
10.0.0.0/24 255.255.255.0
10.0.0.0/16 255.255.0.0

# 就允许10.0.0.9ip访问 其他拒绝所有
server{
	listen 80;
	server_name _;
	root /test;
	index index.html;
	autoindex on;
	autoindex_exact_size off;
	autoindex_localtime on;
	allow 10.0.0.9; #(允许)先允许再拒绝
	deny all; #(拒绝)
}