一般情况下很少有在代理上弄SSL的,我这么久不写博客也是有原因最近忙了,所以需要弄的东西多了,也得慢慢来整理。

现在至前面总结5 nginx版本 不知道升级了多少个了 我有好长时间没弄了nginx因为之前都弄游戏的服务器了。


#################################################################################

groupadd www

useradd -g www www -s /bin/false

tar -zxvf pcre-8.31.tar.gz -C /usr/src/

cd /usr/src/pcre-8.31/

./configure

make && make install


wget www.openssl.org/source/openssl-1.0.1g.tar.gz 

tar -zxvf openssl-1.0.1g.tar.gz -C /usr/src/

#注意只解压

tar  -zxvf nginx-1.2.3.tar.gz -C /usr/src/

 ./configure --prefix=/usr/local/nginx  --user=www --group=www  --with-http_stub_status_module   --with-openssl=/usr/src/openssl-1.0.1g/  --with-http_ssl_module

 make && make install

 按照上面肯定是没错的,生成SSL 需要的证书 他和HTTP的代理的配置区别也就是这个 和 --with-http_ssl_module 这个参数。

  cd /usr/local/nginx/

  openssl genrsa -des3 -out server.key 1024
  openssl req -new -key server.key -out server.crs
  openssl rsa -in server.key -out server.nopass.key
  openssl req -new -x509 -key server.nopass.key -out server.crt


server.key和server.nopass.key 都是2个私钥文件前者需要输入密码 就算就nginx -t 和启动服务都需要输入,所以我们解脚本启动不需要密码所以就用无密码的。

common name 的时候一定要输入 你  的域名 :www.test.com 其他的东西是随便写都可以 。

这个证书用谁的都可以 但是域名保证一致(都是openssl 生成的) ,一般正规的HTTPS 有专门的 花钱买的证书 保证路径即可。


vim /usr/local/nginx/conf/nginx.conf

user  www www;
worker_processes 8;
error_log   logs/nginx_error.log  crit;
pid        logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
  use epoll;
  worker_connections 65535;
}
http
{
  include       mime.types;
  default_type  application/octet-stream;
  #charset  gb2312;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;
  sendfile on;
  tcp_nopush     on;
  keepalive_timeout 60;
  tcp_nodelay on;
  proxy_connect_timeout          600;
  proxy_read_timeout               600;
  proxy_send_timeout              600;
  proxy_buffer_size                  16k;
  proxy_buffers                        4  32k;
  proxy_busy_buffers_size        64k;
  proxy_max_temp_file_size      64k;


  log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
  #limit_zone  crawler  $binary_remote_addr  10m;



upstream test {

        server 192.168.68.5:8080; #后端apache

    }


server {

        listen       443 ssl;
        server_name  www.test.com;

        ssl on;  #开启 还有证书的路径
        ssl_certificate       /usr/local/nginx/server.crt; 
        ssl_certificate_key   /usr/local/nginx/server.nopass.key;

        access_log logs/test.log combined;

        location / {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_pass   http://test; 
            #这个地方代表是后端是正常的HTTP 如果后端也是https 那就是 proxy_pass  https://test; 
            proxy_redirect     off;
            proxy_set_header   Host            www.test.com;
            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;
            index  index.htm index.html index.php;

        }


}
}