nginx反向代理配置及指向本地路径

nginx作为web服务器一个重要的功能就是反向代理。

nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。配置前的准备工作,后端跑apache服务的ip和端口,也就是说可以通过http://ip:port能访问到你的网站。

参考:http://www.ttlsa.com/nginx/use-nginx-proxy/

https://www.cnblogs.com/xiaoruilin/p/7782214.html

https://www.cnblogs.com/yanyuji/p/6688979.html(主要参考注释)

https://blog.csdn.net/chen_________/article/details/68489433

https://www.cnblogs.com/Miss-mickey/p/6734831.html(重点参考,还有更详细的注释)

 

一、nginx反向代理设置

目标:在浏览器中输入xxx123.tk能访问到内网机器192.168.10.38的3000端口,输入xxx456.tk能访问到内网机器192.168.10.40的80端口

1.修改配置文件

vim nginx.conf

user www www;# 运行用户

worker_processes 1;#启动进程,通常设置成和cpu的数量相等

error_log logs/error.log;# 全局错误日志及PID文件

pid logs/nginx.pid;

worker_rlimit_nofile 65535;

# 工作模式及连接数上限

events {

    use epoll;#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

    worker_connections 65535;  #单个后台worker process进程的最大并发链接数

}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {

    include mime.types;#设定mime类型,类型由mime.type文件定义

    default_type application/octet-stream;#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy)来输出文件,对于普通应用, #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

include /usr/local/nginx/conf/reverse-proxy.conf;

#把reverse-proxy.conf配置引用进来,如果server参数配置在此文件则需要配置此项,如果不要此项,则需要把server参数配置在当前下面的server中

    sendfile on;

    keepalive_timeout 65;#连接超时时间

    gzip on;#开启gzip压缩

    client_max_body_size 50m; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为保存到本地再传给用户

    client_body_buffer_size 256k;#缓冲区代理缓冲用户端请求的最大字节数

    client_header_timeout 3m;

    client_body_timeout 3m;

send_timeout 3m;

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

    proxy_connect_timeout 300s; #nginx跟后端服务器连接超时时间(代理连接超时)

    proxy_read_timeout 300s; #连接成功后,后端服务器响应时间(代理接收超时)

    proxy_send_timeout 300s;   #后端服务器数据回传时间(代理发送超时)

    proxy_buffer_size 64k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小

    proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置

    proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)

    proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传递请求,而不缓冲到磁盘

    proxy_ignore_client_abort on; #不允许代理端主动关闭连接

    server {

        listen 80;#侦听80端口

        server_name localhost;# 定义使用www.xx.com访问

charset utf-8;

        location / {

            root html;

            index index.html index.htm;

        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {

            root html;#前端静态文件物理路径 通过http://localhost/html/来访问当前目录下的html下的文件夹

        }

    }

}

2.编辑反向代理服务器配置文件,被配置负载均衡:

vim /usr/local/nginx/conf/reverse-proxy.conf

upstream monitor_server {

    server 192.168.0.131:80;

    server 192.168.0.132:80;#131与132为负载均衡服务器

}

 

server

{

    listen 80;#侦听80端口

    server_name xxx123.tk;# 定义使用www.xxx123.tk访问

    location / {

        proxy_redirect off;

        proxy_set_header Host $host;#请求主机头字段,否则为服务器名称。

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://monitor_server;

    }

    access_log logs/xxx123.tk_access.log;

}

 

server

{

    listen 80;

    server_name xxx456.tk;

    location / {

        proxy_redirect off;

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://192.168.10.40:80;

    }

    access_log logs/xxx456.tk_access.log;

}

3. 设置完成后执行/usr/local/nginx/sbin/nginx -t 检查配置是否正常

如果显示:the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok   configuration file /usr/local/nginx/conf/nginx.conf test is successful 则正常,否则按错误提示进行修改

 

4. 杀死Nginx进程,重启nginx,使修改生效,再把xxx123.tk域名指向公司静态IP

# /usr/local/nginx/sbin/nginx -s reload 或     #  /etc/init.d/nginx reload

或者/etc/init.d/nginx restart

 

另外,由于http请求最后都是由反向代理服务器传递给后段的机器,所以后端的机器原来的访问日志记录的访问IP都是反向代理服务器的IP。

要想能记录真实IP,需要修改后端机器的日志格式,这里假设后端也是一台nginx:

在后端配置文件里面加入这一段即可:

log_format access '$HTTP_X_REAL_IP - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" $HTTP_X_Forwarded_For';

 

access_log logs/access.log access;

二、nginx配置指向本地路径(目录)

参考:https://www.cnblogs.com/freeweb/p/5446632.html(linux例子)

https://blog.csdn.net/lovelovelovelovelo/article/details/75038594(windows例子)

http://desert3.iteye.com/blog/1169326(windows例子:root   D:/resin-pro-3.1.9; 

附Nginx Location指令URI匹配规则:https://blog.csdn.net/xyang81/article/details/51989079

改nginx.conf中对应的server {}下添加location规则,配置如下:

 

        location /image/ {

            root /;

            rewrite ^/image/(.*)$ /image_data/$1 break;

        }

 

root /;设定作用的根目录,rewrite就是真正的跳转规则,设置以image为开头的请求跳转到/image_data开头的根目录,后面的参数原封不动的添加过去,这样就实现了目录的映射,

 

你可能感兴趣的:(server)