介绍nginx一般用法
- nginx安装配置
- 正向代理
- 反向代理、负载均衡
一、安装配置
1.1 下载安装
我们示例中选择版本nginx-1.12.2.tar.gz
#下载到这个目录
cd /usr/local/software
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxvf nginx-1.12.2.tar.gz
#安装必要的开发工具
yum group install -y "Development Tools"
yum install gcc gcc-c++ ncurses-devel perl
yum install -y patch pcre-devel pcre zlib-devel zlib gzip
#安装到这个目录
./configure --prefix=/usr/local/nginx
make & make install
1.2 常用操作
#进入安装目录下的sbin目录
cd /usr/local/nginx/sbin
#启动
./nginx
#检查 nginx.conf配置文件是否有语法错误
./nginx -t
#重启
./nginx -s reload
#停止
./nginx -s stop
1.3 添加虚拟主机
cd /usr/local/nginx
vim ./conf/nginx.conf
#http节点下面添加server节点
server{
listen 7777;
server_name localhost;
location / {
root test;
index index.html;
}
}
#在nginx根目录下面创建test目录,并添加index.html静态页面文件
#重新加载配置
./sbin/nginx -s reload
#访问localhost:7777
1.4 日志配置
cd /usr/local/nginx
vim ./conf/nginx.conf
#全局访问日志
#http>新增access_log、log_format配置
#单独指定某一个虚拟主机日志
#http>server>新增access_log、log_format配置
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;
#访问虚拟主机之后可以通过tail命令查看日志中输出的访问日志
tail -f ./logs/access.log
日志按照时间分割:
通过自定义shell脚本+crontab定时备份日志到新文件中
#!/bin/bash
#示例shell脚本名称为nginx_log.sh
#设置日志文件存放目录
LOG_HOME="/usr/local/nginx/logs/"
#备分文件名称,本示例按照分钟来分割文件
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".test.access.log
#重命名日志文件
mv ${LOG_HOME}/test.access.log ${LOG_HOME}/${LOG_PATH_BAK}
#向nginx主进程发信号重新打开日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
执行crontab定时执行nginx_log.sh
crontab -e
#一分钟执行一次
*/1 * * * * sh /usr/local/nginx/nginx_log.sh
二、正向代理
2.1 普通http代理
内–>外,举例子,通常无法访问google,我们找一台能够访问goole的机器,在上面搭一个nginx代理,把这个代理当做跳板,内网就可以访问google了
nginx代理配置
# 在http节点下添加代理server节点
server {
# 配置DNS解析IP地址,比如 Google Public DNS,以及超时时间(5秒)
#resolver必须,填DNS地址
resolver 114.114.114.114;
resolver_timeout 5s;
# 监听端口
listen 8080;
access_log /home/reistlin/logs/proxy.access.log;
error_log /home/reistlin/logs/proxy.error.log;
location / {
# 配置正向代理参数
proxy_pass $scheme://$host$request_uri;
# 解决如果URL中带"."后Nginx 503错误
proxy_set_header Host $http_host;
# 配置缓存大小
proxy_buffers 256 4k;
# 关闭磁盘缓存读写减少I/O
proxy_max_temp_file_size 0;
# 代理连接超时时间
proxy_connect_timeout 30;
# 配置代理服务器HTTP状态缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
- windows客户端浏览器添加代理的方式
打开IE>设置>Internet选项>连接>局域网设置>添加代理服务器
- linux客户端添加代理的方式
#一次性代理,直接在shell执行
export http_proxy=http://192.168.1.9:8080
#永久使用
vim /etc/profile
export http_proxy=http://192.168.1.9:8080
source /etc/profile
#yum源配置:
vim /etc/yum.conf
proxy=http://192.168.1.9:8080
#通过curl指定代理来直接测试代理是否生效
curl -x 192.168.1.9:8080 -I http://xxxx.xxxx.xxxx/xxx.xxx
2.2 同时支持http、https
默认情况下nginx自身无法代理https请求,按照上面的步骤配置之后,客户端只能访问http网页,无法访问https的
安装ngx_http_proxy_connect_module模块
通过额外的ngx_http_proxy_connect_module模块,可以让nginx正向代理同时支持http、https,
但是这个模块的安装必须要重装nginx
,因为涉及到nginx内核修改,所以如果需要使用nginx来做正向代理功能且支持https,安装时必须把这个模块考虑进去
停掉nginx服务,进入最一开始下载的源码目录下,重新安装
#首先下载ngx_http_proxy_connect_module
cd /usr/local/software
git clone https://github.com/chobits/ngx_http_proxy_connect_module.git
#安装模块到nginx中,然后重新安装nginx
cd /usr/local/software/nginx-1.12.2
patch -p1 < ../ngx_http_proxy_connect_module/patch/proxy_connect.patch
./configure --add-module=../ngx_http_proxy_connect_module --prefix=/usr/local/nginx
make && make install
注意版本的对应关系,nginx-1.12.2版本对应的是proxy_connect.patch这个模块文件
配置支持http、https
#支持https的正向代理配置
server {
resolver 114.114.114.114;
resolver_timeout 5s;
listen 8889;
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
access_log logs/https.log main;
location / {
proxy_pass http://$host;
proxy_set_header Host $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
客户端配置代理服务器,访问外网,服务端监视一下访问日志
cd cd /usr/local/nginx/logs
tail -f https.log
三、反向代理、负载均衡
外–>内,举例子,内网搭了一个web集群站点,现在想让外部人来访问这个站点,为了支持负载,可以配置一个nginx服务器,外部请求通过这个nginx服务器转发到后端的web站点
nginx配置
#在http节点下配置反向代理服务
#weigth参数表示权值,权值越高被分配到的几率越大
upstream hello{
server 192.168.237.129:8080 weight=1;
server 192.168.237.129:8080 weight=1;
}
server {
#侦听的80端口
listen 9999;
server_name localhost;
location / {
#在这里设置一个代理,和upstream的名字一样
proxy_pass http://hello;
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数
client_body_buffer_size 128k;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 300;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 300;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 300;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
}
一个完整的nginx.conf配置
worker_processes 1;
events {
worker_connections 1024;
}
http {
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;
keepalive_timeout 65;
#1. 默认80端口的静态页面虚拟主机
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#2. 自定义7777端口的静态页面虚拟主机
server{
listen 7777;
server_name localhost;
location / {
root test;
index index.html;
}
access_log logs/test.access.log main;
}
#3. 正向代理配置
server {
resolver 114.114.114.114;
resolver_timeout 10s;
listen 443;
access_log logs/forward_proxy.log main;
error_log logs/forward_proxy_error.log;
location / {
proxy_pass https://$host$request_uri;
proxy_set_header Host $http_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
#3.1 正向代理支持https
server {
resolver 114.114.114.114;
resolver_timeout 5s;
listen 8889;
proxy_connect;
proxy_connect_allow 443 563;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
access_log logs/https.log main;
location / {
#proxy_pass $scheme://$host$request_uri;
#proxy_set_header Host $http_host;
proxy_pass http://$host;
proxy_set_header Host $host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#4. 反向代理
#weigth参数表示权值,权值越高被分配到的几率越大
upstream hello{
server 192.168.237.129:8080 weight=1;
server 192.168.237.129:8080 weight=1;
}
server {
#侦听的80端口
listen 9999;
server_name localhost;
location / {
#在这里设置一个代理,和upstream的名字一样
proxy_pass http://hello;
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#允许客户端请求的最大单文件字节数
client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数
client_body_buffer_size 128k;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 300;
#后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 300;
#连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 300;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
}
}