Nginx的初步认识及配置
1. 什么是Nginx
是一个高性能的反向代理服务器
正向代理代理的是客户端
反向代理代理的是服务端
1.1 Apache&Tomcat&Nginx 区别
Apache、Nginx :静态web服务器;可以通过模块实现动态处理
Tomcat、Jetty:动态web服务器
jsp/servlet服务器 tomcat
Apache、Nginx 都是模块化设计
1.2 安装Nginx
- 下载tar包
- tar -zxvf nginx-1.17.0.tar.gz
- ./configure [--prefix]
## 安装路径 mkdir /opt/program/nginx ./configure --prefix=/opt/program/nginx - make && make install
可能需要安装一些依赖组件
1.3启动和停止
sbin/nginxcd /opt/program/nginx sbin/nginx./nginx -s stop
2. nginx.conf
2.1 Main
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
2.2 event
events {
worker_connections 1024;
}
2.3 http
http {
include /etc/nginx/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 /etc/nginx/logs/access.log main;
error_log /etc/nginx/logs/error.log warn;
server_tokens off;
# ...
server {
listen 80;
server_name www.demo.com; #当前服务器ip地址
location /web {
# ...
}
}
}
2.4 server
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.4.1 基于ip的虚拟主机
server {
listen 80;
server_name 172.18.11.120;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2.4.2 基于端口号的虚拟主机
server {
## 监听的端口
listen 8080;
## 访问的地址
server_name localhost;
location / {
## 资源根目录
root html;
## 主页 index
index index.html;
}
}
重新加载配置文件
../sbin/nginx -s reload
2.4.3 基于域名的虚拟主机
www.demo.com ask.demo.com git.demo.com bbs.demo.com
server {
listen 80;
server_name www.demo.com;
location / {
root html;
index index.html;
}
}
server {
listen 80;
server_name bbs.demo.com;
location / {
root html;
index bbs.html;
}
}
server {
listen 80;
server_name ask.demo.com;
location / {
root html;
index ask.html;
}
}
3. location
3.1 配置语法
location [= | ~* | ^~ ] /uri/ {...}
3.2 配置规则
location = /uri 精准匹配
location ^~ /uri 前缀匹配
location ~ /uri 正则匹配
location / 通用匹配
3.3 规则的优先级
1 location = /
2 location = /index
## 前缀匹配 /article/*
3 location ^~ /article/
4 location ^~ /article/files/
## 静态资源
5 location ~ \.(gif|png|js|css)$
6 location /
http://192.168.11.154/
http://192.168.11.154/index ->2
http://192.168.11.154/article/files/1.txt ->4
http://192.168.11.154/mic.png ->5
- 精准匹配是优先级最高
- 普通匹配(最长的匹配)
- 正则匹配
3.4 实际使用建议
location =/ {
}
location / {
}
location ~* \.(gif|....)${
}
4. Nginx模块
反向代理、email、nginx core。。。
4.1 模块分类
- 核心模块 ngx_http_core_module
- 标准模块 http模块
- 第三方模块
4.2 ngx_http_core_module
server{
listen port
server_name
root ...
}
location 实现uri到文件系统路径的映射
error_page
4.3 ngx_http_access_module
实现基于ip的访问控制功能
1、allow address | CIDR | unix: | all;
2、deny address | CIDR | unix: | all;
自上而下检查,一旦匹配,将生效,条件严格的置前
4.4 如何添加第三方模块
原来所安装的配置,你必在重新安装新模块的时候,加上
不能直接make install
configure --prefix=/data/program/nginx
安装方法
./configure --prefix=/安装目录 --add-module = /第三方模块的目录
./configure --prefix=/data/program/nginx --with-http_stub_status_module --with- http_random_index_module
cp objs/nginx $nginx_home/sbin/nginx
4.5 http_stub_status_module
location /status {
stub_status;
}
Active connections:当前状态,活动状态的连接数
accepts:统计总值,已经接受的客户端请求的总数
handled:统计总值,已经处理完成的客户端请求的总数
requests:统计总值,客户端发来的总的请求数
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
Writing:当前状态,正在向客户端发送响应报文过程中的连接数
Waiting:当前状态,正在等待客户端发出请求的空闲连接数
4.6 http_random_index_module
www.demo.com
随机显示主页
一般情况下,一个站点默认首页都是定义好的index.html、index.shtml等等,如果想站点下有很多页面想随机展示给
用户浏览,那得程序上实现,很麻烦,使用nginx的random index即可简单实现这个功能,凡是以/结尾的请求,都
会随机展示当前目录下的文件作为首页
- 添加random_index on 配置,默认是关闭的
location / { root html; random_index on; index index.html index.htm; } - 在html目录下创建多个html页面