最近本人需要做一个项目,走走代理。这个就涉及到了反向代理这块了,所以就做做笔记。
经过:拿到一台代理服务器、一个项目发布的服务器。项目发布的服务器呢,安装了宝塔面板。现在我们宝塔上发布的项目都需要经过代理服务器,代理服务器需要安装nginx、ssl模块。
在代理服务器上的操作步骤如下:
一、Nginx安装及扩展安装:
1、安装gcc:gcc是linux下的编译器,它可以编译 C,C++,Ada,Object C和Java等语言,一般服务器系统安装后会自动装好,首先我们检查以下服务器是否已安装,执行如下命令:
a、进入服务器根目录:cd /
b、检查是否安装gcc:gcc -v
如图所示,就代表gcc已安装。
c、如果没有安装,执行命令:yum -y install gcc
2、安装pcre、pcre-devel:pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。
在服务器根目录下执行命令:yum install -y pcre pcre-devel
3、安装zlib:zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip。
在服务器根目录下执行命令:yum install -y zlib zlib-devel
4、安装nginx
a、下载Nginx安装包,执行命令(我的下载位置:/usr/local):wget http://nginx.org/download/nginx-1.9.9.tar.gz
b、解压安装包,执行命令:tar -zxvf nginx-1.9.9.tar.gz
c、重命名文件夹:mv nginx-1.9.9 nginx
d、切换到 /usr/local/nginx 目录下,依次执行以下命令:
./configure
make
make install
5、安装openssl:openssl是web安全通信的基石
a、切换到 /usr/local/nginx 目录下,执行命令:./configure --with-http_ssl_module
b、如果报错 ./configure: error: SSL modules require the OpenSSL library.则依次执行以下命令:
yum -y install openssl openssl-devel
./configure
./configure --with-http_ssl_module
c、执行命令(切记不能 make install 会覆盖安装目录): make
d、备份原来的Nginx启动文件:cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
e、将新的 nginx 启动文件 覆盖旧的启动文件,执行命令:cp objs/nginx /usr/local/nginx/sbin/nginx
如果报错,则执行:cp -rfp objs/nginx /usr/local/nginx/sbin/nginx
f、启动Nginx,执行命令 (切换目录至 /usr/local/nginx/sbin):./nginx
g、检查Nginx服务是否启动成功,执行命令:ps -ef | grep nginx
二、Nginx反向代理配置:Nginx配置详解
1、切换目录至 /usr/local/nginx 下,新建文件夹如下:
mkdir conf.d (放置反向代理配置文件)
mkdir ssl (放置SSL证书)
mkdir logs (放置日志)
2、切换至 /usr/local/nginx/conf 目录下,将 nginx.conf 文件修改为:
user nobody;
worker_processes auto;
worker_rlimit_nofile 51200;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 10240;
}
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;
client_max_body_size 200m;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /usr/local/nginx/conf.d/*.conf;
}
--------------------------------------------------------------------配置文件详解开始-----------------------------------------------------------------------------
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
几个常见配置项:
--------------------------------------------------------------------配置文件详解结束-----------------------------------------------------------------------------
3、切换目录至 /usr/local/nginx/conf.d 文件夹下
a、http访问配置示例:abc.test123.com 为例子:
》新建 abc.conf文件,内容如下:
upstream abc {
server 102.xx.xx.xx:80; # 项目发布的服务器 IP 地址
keepalive 32;
}
server {
listen 80;
server_name abc.test123.com;
location / {
proxy_pass http://abc/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
b、https访问配置示例:cc.test123.com
》新建 cc.conf文件,内容如下:
upstream cc {
server 102.xx.xx.xx:443; # 项目发布的服务器 IP 地址
keepalive 32;
}
server {
listen 443;
server_name cc.test123.com;
ssl on; #开启ssl
ssl_certificate /usr/local/nginx/ssl/cc.test123.com.crt; #SSL证书公钥
ssl_certificate_key /usr/local/nginx/ssl/cc.test123.com.key; #SSL证书私钥
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://cc/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
》切换至 /usr/local/nginx/ssl 目录下,新建以下2个文件:
cc.test123.com.crt
cc.test123.com.key
将SSL证书内容粘贴进去,我们以宝塔面板自带的SSL证书为例
》重启nginx,使用 https://cc.test123.com 访问
c、socket 访问示例:
upstream socket {
server 102.xx.xx.xx:9090; # 项目发布的服务器 IP 地址
keepalive 32;
}
server {
listen 80;
server_name socket.test123.com;
location / {
proxy_pass http://socket/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
d、顶级域名访问
upstream A {
server 102.xx.xx.xx:80; # 项目发布的服务器 IP 地址
keepalive 32;
}
server {
listen 80;
server_name test123.com;
location / {
proxy_pass http://A/;
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反向代理配置结束了。
------------------------------------------------------- Nginx启动、关闭常用命令 -------------------------------------------------------------------------
1、普通启动 (切换到nginx下sbin目录下):./nginx
2、配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/conf/nginx.conf
3、检查Nginx是否启动:ps -ef | grep nginx
4、重启nginx:./nginx -s reload
5、删除文件:rm -rf 文件名