nginx反向代理https网站 并实现网站的注册和登录功能
最近给我们官网做了新加坡、中国香港、美国、加拿大地区的反代,由于现阶段发展有限,只好选择这种最节约的方法了,但并非负载均衡,负载均衡等后期商城确定了要做。 除了加拿大是高配机器之外,其他都是小云服务器,中国香港是阿里云的。 所以用了军哥的一键lnmp来做的基础,当然只是反代是不需要太多的,不用任何一键脚本都可以,我是为了更多的检测,加上时间关系,就用了军哥的。 nginx反代多数是用sub_filter,但是这个需要ngx_http_sub_module模块,刚好军哥的安装包就自带编译了,所以很方便。 开始工作: 一、给服务器上面安装nginx、php、带上http_sub_module、pcre-devel、openssl模版编译即可。(其他模块常见的就不说了,一键脚本都有,反代用到的也少)
军哥一键安装包:lnmp.org
手动编译nginx在这里我就不说了。
二、配置反向代理规则
一键包安装好之后,已经默认有nginx.conf文件了,所以我们就直接修改nginx.conf就行。
1:先创建缓存文件夹
mkdir /home/cache/path -p
mkdir /home/cache/temp -p
2:修改nginx.conf文件中的http区域,在这里增加反代的缓存设置。还有wordpress正常功能的配置。如果不是wordpress网站可以不要那几句。
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6].";
#limit_conn_zone $binary_remote_addr zone=perip:10m;
##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
#从这里开始就是在http区域里面添加的,上面的是默认就有的,可以不动。
#这一段是为了wordpress的功能
#map $http_cookie $logged_in {
#default 0;
#~SESS 1; # Drupal session cookie
#~wordpress_logged_in 1; # WordPress session cookie
#}
#下面这段就是反代缓存设置了
server_tokens off;
access_log off;
client_body_buffer_size 512k;#缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 5;#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 60;#连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 5;#请求的超时时间
proxy_buffer_size 16k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 64k;#proxy_buffers缓冲区,网页平均在64k以下
proxy_busy_buffers_size 128k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:100m inactive=3d max_size=5g;
#这一段就是反代的一些缓存和设置,最后一句cache_one为缓存区名字,100m是内存占用, 3d是3天删除, 5g是缓存空间,
这些时间只是做镜像反代不用设置太长,如果是做集群负载就可以加长相互的连接时间。
3:修改nginx.conf文件中的server区域,在这里增加反代的proxy规则
反代域名的80端口监听设置
server {
listen 80;
server_name cs.test.com;#反代域名
#这里的跳转,如果不是要反代ssl网站就不用了
if ( $scheme = http ){
return 301 https://$server_name$request_uri;
}
#屏蔽蜘蛛,防止降权,反代别人的网站。。。就随便了
if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
return 403;
}
#反代规则设置
location / {
sub_filter www.test.com cs.test.com; #网站域名,反代域名
sub_filter_once off;#进行替换
proxy_cache cache_one;
#缓存区名称
proxy_cache_valid 200 304 3h;
#200 304状态缓存3小时
proxy_cache_valid 301 3d;
#301状态缓存3天
proxy_cache_valid any 10s;
#其他状态缓存(如502 404)10秒
proxy_cache_key "$scheme://$host$request_uri";
#缓存key规则,自动清除缓存
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#向后端传递访客ip
proxy_set_header Referer http://www.test.com;
#强制定义Referer
proxy_set_header Host www.test.com;
#定义主机
proxy_pass http://www.test.com;
#
proxy_set_header Accept-Encoding "";
#重要 将信息传递到服务器端
}
}
这个80端口,也可以取消加到下面433一起去。如果不做https的ssl反代就用上面这个就行了。 我看国外的一些网站上,基本都是分别创建server,国内的看见几个都是加在一起的,但是我加在一起的时候,出现过问题,另外为了方便自己,毕竟是80要强制跳转到433的,所以我单独创建了。反代网站最好是用ssl吧,可以防止被判为非法。
server
{
listen 443 ssl;
ssl on;
ssl_certificate /usr/local/nginx/ssl/cs.test.com.crt;
ssl_certificate_key /usr/local/nginx/ssl/cs.test.com.key;
#这里的域名证书是你反代的域名的证书,现在免费证书网上一大堆可以申请的,就不说了
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
#跳转https
if ( $scheme = http ){
return 301 https://$server_name$request_uri;
}
#屏蔽蜘蛛,防止降权
if ($http_user_agent ~* (baiduspider|360spider|haosouspider|googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)) {
return 403;
}
#反代规则设置
location / {
sub_filter www.test.com cs.test.com; #网站域名,反代域名
sub_filter_once off;
proxy_cache cache_one;
#缓存区名称
proxy_cache_valid 200 304 3h;
#200 304状态缓存3小时
proxy_cache_valid 301 3d;
#301状态缓存3天
proxy_cache_valid any 10s;
#其他状态缓存(如502 404)10秒
proxy_cache_key "$scheme://$host$request_uri";
#缓存key规则,自动清除缓存
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#向后端传递访客ip
proxy_set_header Referer https://www.test.com;
#强制定义Referer
proxy_set_header Host www.test.com;
#定义主机
proxy_pass_header Set-Cookie;
#这两句是为了实现wordpress的正常功能
#proxy_cache_bypass $logged_in;
#proxy_no_cache $logged_in;
#这两句是为了实现wordpress的正常功能
proxy_pass https://www.test.com;
#这种写法,这里就必须得是https
proxy_set_header Accept-Encoding "";
#重要将信息传递到服务器端
}
}
}
最后看看nginx -t有没有什么语法错误,有就修改,没有就重启nginx,看有没有生效。 我们做这个纯属因为wordpress网站关系,这样做下来,反代的网站,功能上都正常,包括支付功能。 下次做负载均衡了,也会靠这个的大部分配置。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 技术创作101训练营-CRC校验没那么难
- 栈与队列:有没有想过计算机是如何处理表达式的?
- 栈与队列:滑动窗口里求最大值引出一个重要数据结构
- 栈与队列:求前 K 个高频元素和队列有啥关系?
- 手写一个抖音视频去水印工具,千万别刚一个程序员
- ApplicationListener接口实践
- 浅谈vue+element全局loading加载
- LeetCode59|重复N次的元素
- 谈Vue组件的is特性
- 基于日志的回放对比系统设计
- 【收藏向】常用Java排错工具单
- MYSQL数据同步之基于GTID事务数据同步
- 【风险通告】XXL-JOB远程命令执行漏洞
- MySQL8.0特性之redo logging动态开关
- 3分钟短文:Laravel模型集合跟基类真不一样,别混为一谈