Nginx反向代理

Nginx反向代理

本文档将使用一台nginx服务器,反向代理HTTP和HTTPS,详细配置方法如下:

反向代理HTTP

http server 地址:http://10.0.33.248:8080

nginx代理服务器地址:10.0.33.147 操作系统为 centos6.6

配置yum源

登录到centos服务器,配置epel源,执行一下命令

yum install epel-release`

创建文件/etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/x86_64/
gpgcheck=0
enabled=1

安装nginx

yum install nginx

修改配置

使用80端口转发http,那么需要把默认配置删除,或者注释掉

mv  /etc/nginx/conf.d/default.conf    /etc/nginx/conf.d/default.conf.bak

创建文件/etc/nginx/conf.d/http.conf,修改IP和端口

upstream cloudmanager  {
    server 10.0.33.248:8080;  
}
server {
    listen 80;
    server_name  10.0.33.147; #本机IP

    location / {
        proxy_pass  http://cloudmanager;

        #代理设置
        proxy_redirect     off;
        proxy_set_header   Host             $host;

        #后端的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 90;

        #连接成功后,后端服务器响应时间(代理接收超时)
        #连接成功后,等候后端服务器响应时间,其实已经进入后端的排队之中等候处理
        #(也可以说是后端服务器处理请求的时间)
        proxy_read_timeout 90; 

        # 后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
        proxy_send_timeout 90;

        #设置代理服务器(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;  

        proxy_next_upstream error timeout invalid_header http_500 http_502 
        http_503 http_504;
   }
}

重启nginx服务

service nginx restart

访问 http://10.0.33.147/ 验证有效。

反向代理HTTPS

https地址 https://10.0.33.64:9443 这里我用的是vcenter, 端口参考
这里

创建并修改/etc/nginx/conf.d/https.conf,使用本机443端口代理9443,
7331代理7331(websocket端口),修改配置之前,我们先制作一下证书。

自制证书

初始配置,进入目录/etc/pki/CA/,其他系统目录可能不同.参考这里

cd /etc/pki/CA/
mkdir -p CA/newcerts
touch CA/index.txt
touch CA/serial
echo "01" > CA/serial
制作CA证书

ca.key CA私钥:

openssl genrsa -des3 -out ca.key 2048

制作解密后的CA私钥(一般无此必要):

openssl rsa -in ca.key -out ca_decrypted.key

ca.crt CA根证书(公钥):

openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
生成网站的证书并用CA签名认证

在这里,假设网站域名为10.0.33.147
生成10.0.33.147证书私钥(pass phrase填123):

openssl genrsa -des3 -out nginx.pem 2048

制作解密后的10.0.33.147证书私钥:

openssl rsa -in nginx.pem -out nginx.decode.key

生成签名请求:

openssl req -new -key nginx.pem -out nginx.csr

在common name中填入网站域名。

用CA进行签名:

openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in nginx.csr -out nginx.crt  

其中,policy参数允许签名的CA和网站证书可以有不同的国家、地名等信息,days参数则是签名时限。

证书自制完成。

配置Nginx for HTTPS

创建并修改/etc/nginx/conf.d/https.conf,使用本机443端口代理9443,
7331代理7331(websocket端口),修改ip,端口和相应的证书路径,参考这里

upstream vcenter-9443 {
    server 10.0.33.64:9443;
}

upstream vcenter-7331 {
    server 10.0.33.64:7331;
}

server {
    listen 443;
    server_name  10.0.33.147;

    ssl on;
    ssl_certificate /root/ssl/nginx.crt ;
    ssl_certificate_key /root/ssl/nginx.decode.key;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers    HIGH:!aNULL:!MD5;
    keepalive_timeout 60;


    location / {
        proxy_pass  https://vcenter-9443;
allow all;

        proxy_redirect     off;
        proxy_set_header   Host             $host;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

   }
}

server {
    listen 7331;
    server_name  10.0.33.147;

    ssl on;
    ssl_certificate  /root/ssl/nginx.crt ;
    ssl_certificate_key  /root/ssl/nginx.decode.key;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers    HIGH:!aNULL:!MD5;
    keepalive_timeout 60;

    location / {
        proxy_pass  https://vcenter-7331;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade"; 

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      }
}

并重启nginx服务

service nginx restart

访问https://10.0.33.147,验证有效。

Nginx 反向代理是一种常用的服务器配置方法,它可以将客户端的请求转到后端的多个服务器上,并将响应返回给客户端。通过反向代理,可以实现负载均衡、缓存、安全性等功能。 要配置 Nginx 反向代理,你需要编辑 Nginx 的配置文件(通常是 `nginx.conf`),然后添加相应的配置项。 以下是一个简单的 Nginx 反向代理配置示例: ``` http { upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 在这个示例中,`upstream` 块定义了后端服务器的列表。`server` 块定义了监听的端口和域名,并在 `location` 块中配置了反向代理。 `proxy_pass` 指令将请求转发到 `http://backend`,其中 `backend` 是 `upstream` 块中定义的后端服务器列表。 `proxy_set_header` 指令用于设置转发请求时的请求头。在示例中,我们设置了 `Host` 和 `X-Real-IP` 请求头。 完成配置后,保存文件并重新加载 Nginx 配置。这样,Nginx 就会将客户端的请求转发到后端服务器,并将响应返回给客户端。 请注意,以上只是一个简单的示例,实际的配置可能因具体需求而有所不同。你可以根据实际情况进行配置,并参考 Nginx 官方文档获取更多信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值