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; #(拒绝)
}