简单测试nginx反向代理和负载均衡功能的操作记录(2)-----https代理

背景:
A服务器(192.168.1.8)作为nginx代理服务器
B服务器(192.168.1.150)作为后端真实服务器

现在需要访问https://testwww.huanqiu.com请求时从A服务器上反向代理到B服务器上

这就涉及到nginx反向代理https请求的配置了~~~

------------------------------------------------------------------------------------
A服务器(192.168.1.8)上的操作流程:

1)编译安装nginx
[[email protected] ~]# yum install -y pcre pcre-devel openssl openssl-devel gcc
[[email protected] ~]# cd /usr/loca/src
[[email protected] ~]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
[[email protected] ~]# tar -zxvf nginx-1.8.0.tar.gz
[[email protected] ~]# cd nginx-1.8.0
#添加www用户,其中-M参数表示不添加用户家目录,-s参数表示指定shell类型

[[email protected] ~]#useradd www -M -s /sbin/nologin
[[email protected] ~]##vim auto/cc/gcc
#将这句注释掉 取消Debug编译模式 大概在179行
#CFLAGS="$CFLAGS -g"

#我们再配置下nginx编译参数,编译时一定要添加--with-http_ssl_module,以便让nginx支持ssl功能!
[[email protected] ~]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
[[email protected] ~]#make
[[email protected] ~]#make install clean

2)配置nginx
[[email protected] ~]# cd /usr/local/nginx/conf
[[email protected] conf]# cat nginx.conf
user nobody;
worker_processes 8;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 65535;
}

http {
include mime.types;
default_type application/octet-stream;
charset utf-8;

#######
## http setting
#######
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
fastcgi_connect_timeout 6000;
fastcgi_send_timeout 6000;
fastcgi_read_timeout 6000;
fastcgi_buffer_size 256k;
fastcgi_buffers 8 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

##
client_header_timeout 60s;
client_body_timeout 60s;
client_max_body_size 50m;
client_body_buffer_size 256k;

## support more than 15 test environments
server_names_hash_max_size 512;
server_names_hash_bucket_size 128;

##
#gzip on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
gzip_vary on;

######
## set access log format
######i
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for" $http_cookie" $host $request_time‘;

include vhosts/*.conf;

}

-----------------------------------------------------
接下来手动配置ssl证书
如果自己手动颁发证书的话,那么https是不被浏览器认可的,就是https上面会有一个大红叉
****************************************************
推荐一个免费的网站:https://www.startssl.com/
startssl的操作教程看这个:http://www.freehao123.com/startssl-ssl/
****************************************************

下面是手动颁发证书的操作:
[[email protected] ~]# cd /usr/local/nginx/conf/
[[email protected] conf]# mkdir ssl
[[email protected] conf]# cd ssl/
[[email protected] ssl]# openssl genrsa -des3 -out aoshiwei.com.key 1024
Generating RSA private key, 1024 bit long modulus
................................++++++
....................................++++++
e is 65537 (0x10001)
Enter pass phrase for aoshiwei.com.key:                    #提示输入密码,比如这里我输入123456
Verifying - Enter pass phrase for aoshiwei.com.key:     #确认密码,继续输入123456

[[email protected] ssl]# ls                                       #查看,已生成CSR(Certificate Signing Request)文件
aoshiwei.com.key

[[email protected] ssl]# openssl req -new -key aoshiwei.com.key -out aoshiwei.com.csr
Enter pass phrase for aoshiwei.com.key:                      #输入123456
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn                                                         #国家
State or Province Name (full name) []:beijing                                               #省份
Locality Name (eg, city) [Default City]:beijing                                               #地区名字
Organization Name (eg, company) [Default Company Ltd]:huanqiu                 #公司名
Organizational Unit Name (eg, section) []:Technology                                     #部门
Common Name (eg, your name or your server‘s hostname) []:huanqiu            #CA主机名
Email Address []:[email protected]                                                      #邮箱

Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:123456                                                                   #证书请求密钥,CA读取证书的时候需要输入密码
An optional company name []:huanqiu                                                          #-公司名称,CA读取证书的时候需要输入名称

[[email protected] ssl]# ls
aoshiwei.com.csr aoshiwei.com.key

[[email protected] ssl]# cp aoshiwei.com.key aoshiwei.com.key.bak
[[email protected] ssl]# openssl rsa -in aoshiwei.com.key.bak -out aoshiwei.com.key
Enter pass phrase for aoshiwei.com.key.bak:                            #输入123456
writing RSA key
[[email protected] ssl]# openssl x509 -req -days 365 -in aoshiwei.com.csr -signkey aoshiwei.com.key -out aoshiwei.com.crt
Signature ok
subject=/C=cn/ST=beijing/L=beijing/O=huanqiu/OU=Technology/CN=huanqiu/[email protected]
Getting Private key
[[email protected] ssl]# ll
total 24
-rw-r--r-- 1 root root 960 Sep 12 16:01 aoshiwei.com.crt
-rw-r--r-- 1 root root 769 Sep 12 15:59 aoshiwei.com.csr
-rw-r--r-- 1 root root 887 Sep 12 16:01 aoshiwei.com.key
-rw-r--r-- 1 root root 963 Sep 12 16:01 aoshiwei.com.key.bak

然后配置nginx的反向代理:
[[email protected] vhosts]# pwd
/usr/local/nginx/conf/vhosts
[[email protected] vhosts]# cat test.xqshijie.com-ssl.conf
upstream 8090 {
server 192.168.1.150:8090; 
}

server {
listen 443 default ssl;
server_name testwww.huanqiu.com;
ssl on;

### SSL log files ###
access_log logs/ssl-access.log;
error_log logs/ssl-error.log;

### SSL cert files ###
ssl_certificate ssl/aoshiwei.com.crt;                         #由于这个证书是自己手动颁发的,是不受信任的,访问时会有个“大叉”提示,但是不影响访问https://testwww.huanqiu.com
ssl_certificate_key ssl/aoshiwei.com.key;                 #如果是线上环境,可以购买被信任后的证书,拷贝过来使用。

ssl_session_timeout 5m;

location / {
proxy_pass https://8090;                                      #这个一定要是https
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
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_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}

重启nginx
[[email protected] ssl]# /usr/local/nginx/sbin/nginx -t
[[email protected] ssl]# /usr/local/nginx/sbin/nginx -s reload

[[email protected] ssl]# lsof -i:443
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 15755 nobody 24u IPv4 4717921 0t0 TCP *:https (LISTEN)
nginx 15756 nobody 24u IPv4 4717921 0t0 TCP *:https (LISTEN)
nginx 15757 nobody 24u IPv4 4717921 0t0 TCP *:https (LISTEN)
nginx 15758 nobody 24u IPv4 4717921 0t0 TCP *:https (LISTEN)

A服务器要开启防火墙了,则需要在iptables里开通443端口的访问
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

[[email protected] ssl]# /etc/init.d/iptables restart

------------------------------------------------------------------------------------
后端真是服务器(192.168.1.150)上的nginx配置

[[email protected] vhosts]# cat test.xqshijie.com-ssl.conf
server {
listen 8090;                                                                       #这里后端服务器的https没有采用默认的443端口

server_name testwww.huanqiu.com;
root /var/www/vhosts/test.huanqiu.com/httpdocs/main/;

ssl on;
ssl_certificate /Data/app/nginx/certificates/xqshijie.cer;          #这是后端服务器上的证书,这个是购买的被信任的证书,可以把它的证书拷贝给上面的代理机器使用
ssl_certificate_key /Data/app/nginx/certificates/xqshijie.key;   #即可以将这两个证书文件拷给上面192.168.1.8机器的/usr/loca/nginx/conf/ssl下使用,修改nginx代理配置部分的证书路径即可!

ssl_session_timeout 5m;

ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

access_log /var/www/vhosts/test.huanqiu.com/logs/clickstream_ssl.log main;

location / {
try_files $uri $uri/ @router;
index index.php;
}

error_page 500 502 503 504 /50x.html;

location @router {
rewrite ^.*$ /index.php last;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_read_timeout 300;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
#include fastcgi_params;
include fastcgi.conf;
fastcgi_param HTTPS on;                              #这个一定要加上,否则访问https时会出现报错:The plain HTTP request was sent to HTTPS port
}
} ##end server

[[email protected] vhosts]# lsof -i:8090
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 24373 root 170u IPv4 849747 0t0 TCP *:8090 (LISTEN)
nginx 25897 nobody 170u IPv4 849747 0t0 TCP *:8090 (LISTEN)
nginx 25898 nobody 170u IPv4 849747 0t0 TCP *:8090 (LISTEN)

最后在浏览器里访问https://testwww.huanqiu.com就能通过192.168.1.8服务器反向代理到192.168.1.150上的8090端口上了~

时间: 2024-10-14 15:19:46

简单测试nginx反向代理和负载均衡功能的操作记录(2)-----https代理的相关文章

简单聊聊不可或缺的Nginx反向代理服务器--实现负载均衡【上篇】

今天又是新的一周,我养足了精神去对待新一周的工作,但是今天到公司发现还是有一点空闲时间的,所以就想与之前接触过的Nginx再交往得更深一点儿. 什么是Nginx: Nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.官方测试nginx能够支撑5万并发链接,但是实际生产环境能到2-3万并发连接数(只是听说),并且cpu.内存等资源消耗缺非常低,运行非常稳定. Nginx在实际生产中的应用场景: 上面已经说了,Nginx是一款高性能的http服务器,所以

Nginx反向代理、负载均衡功能

环境: [[email protected] ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# cat /etc/redhat-release CentOS release 6.9 (Final) Nginx反向代理知识概念 反向代理与正向代理 此图来源: http://col

简单的nginx+2台tomcat负载均衡(自己记录)

#user  nobody; #工作进程数(worker),一般等于cpu内核数或者两倍 worker_processes  2; #error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error.log  info; #pid        logs/nginx.pid; events {     worker_connections  1024; } http {     includ

简单的nginx模拟网站的负载均衡

环境:nginx1.10.3 虚拟机环境:3台centos7虚拟机 将148机器作为转发服务器配置如下 监听80端口,在http里面配置如下 将edc.com分别转发到149和150的服务器上 本地主机上修改hosts文件 则在浏览器上输入www.cky.com出现下面页面 每次请求都会轮询这两台服务器,如果一台挂了,则会请求到另一台

Nginx实现反向代理负载均衡功能

反向代理软件Nginx:本身支持反向代理.负载均衡功能,属于L7层负载均衡.Nginx反向代理简单易用,受到大部分中小企业的青睐.LVS:支持L4层负载均衡,haproxy:支持L4.L7层负载均衡L4.L7是指OSI模型中的第四层和第七层:L4:TCP负载均衡:L7:http负载均衡nginx.lvs.haproxy区别参考资料https://www.cnblogs.com/ahang/p/5799065.htmlhttps://www.cnblogs.com/like-minded/p/51

nginx反向代理,负载均衡

为了实现nginx的反向代理以及负载均衡功能,我们需要用到HttpProxyModule和HttpUpstreamModule模块.其中,HttpProxyModule模块的作用是将用户的数据请求转发至其他服务器,HttpUpstreamModule模块的作用是提供简单的负载均衡技术(轮询.最少连接.客户端IP).这两个模块为nginx默认的自动编译模块. 当代理单台主机时,nginx配置文件为: server { listen 80; server_name aaa.com; location

nginx实现反向代理及负载均衡

一.反向代理 1.什么是反向代理 通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的(也就是正向代理). 而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理

nginx : TCP代理和负载均衡的stream模块

一直以来,Nginx 并不支持tcp协议,所以后台的一些基于TCP的业务就只能通过其他高可用负载软件来完成了,比如Haproxy. 这算是一个nginx比较明显的缺憾.不过,在1.90发布后这个认知将得到改写: 2015-04-28 nginx-1.9.0 mainline version has been released, with the stream module for generic TCP proxying and load balancing. nginx-1.9.0 已发布,该

apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster

一.基于mod_jk模块实现apache代理tomcat 上篇博文已经学习了nginx代理和负载均衡tomcat及apache基于mod_proxy模块代理tomcat; 现在来学习下apache基于mod_jk模块实现代理及负载均衡Tomcat Cluster 1.基于httpd代理tomcat时可以使用httpd的两个模块 1)mod_jk:第三方模块 mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议