Linux代理服务器 Centos Nginx安装及反向代理配置

        最近本人需要做一个项目,走走代理。这个就涉及到了反向代理这块了,所以就做做笔记。

经过:拿到一台代理服务器、一个项目发布的服务器。项目发布的服务器呢,安装了宝塔面板。现在我们宝塔上发布的项目都需要经过代理服务器,代理服务器需要安装nginx、ssl模块。

在代理服务器上的操作步骤如下:

一、Nginx安装及扩展安装:

1、安装gcc:gcc是linux下的编译器,它可以编译 C,C++,Ada,Object C和Java等语言,一般服务器系统安装后会自动装好,首先我们检查以下服务器是否已安装,执行如下命令:

a、进入服务器根目录:cd /

b、检查是否安装gcc:gcc -v

Linux代理服务器 Centos Nginx安装及反向代理配置

如图所示,就代表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

Linux代理服务器 Centos Nginx安装及反向代理配置

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

Linux代理服务器 Centos 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           
        } 
    }
}

几个常见配置项:

  • 1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
  • 2.$remote_user :用来记录客户端用户名称;
  • 3.$time_local : 用来记录访问时间与时区;
  • 4.$request : 用来记录请求的url与http协议;
  • 5.$status : 用来记录请求状态;成功是200;
  • 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
  • 7.$http_referer :用来记录从那个页面链接访问过来的;
  • 8.$http_user_agent :记录客户端浏览器的相关信息;

--------------------------------------------------------------------配置文件详解结束-----------------------------------------------------------------------------

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证书为例

Linux代理服务器 Centos Nginx安装及反向代理配置

》重启nginx,使用 https://cc.test123.com 访问
Linux代理服务器 Centos Nginx安装及反向代理配置

 

c、socket 访问,最近用的还挺多的,正在研究中 。。。 。。。