网站首页Linux相关

Nginx同时代理http和https

发布时间:2017-08-01编辑:fc不将就阅读(1118

        在同一个服务器上用一个nginx同时代理https的A站点和http的B站点.

        基本流程图如下所示:

            untitled.jpg













        当访问http://www.a.com时,将请求302重定向到https://www.a.com,然后nginx再将443端口的请求代理到http://127.0.0.1:8000的web服务上。

        当访问http://www.b.com时,将请求直接代理到http://127.0.0.1:8008的web服务器上。互相之间不影响,但是这样配置有个问题,当访问https://www.b.com时,会出现a站点的内容,暂时没解决.

      nginx配置

        系统环境Centos7

        1:安装nginx: 

    $ sudo yum install nginx -y

        2:修改nginx的配置文件(仅需要修改下面写出的配置,#为注释掉server的内容)

    $ sudo vim /etc/nginx/nginx.conf
    
    user 你的用户名(不建议用root)
    #server {
    #   listen       80 default_server;
    #   listen       [::]:80 default_server;
    #   server_name  _;
    #   root         /usr/share/nginx/html;
    
    # Load configuration files for the default server block.
    #   include /etc/nginx/default.d/*.conf;
    
    #  location / {
    #  }
    
    # error_page 404 /404.html;
    #     location = /40x.html {
    # }
    
    #error_page 500 502 503 504 /50x.html;
    #     location = /50x.html {
    # }
    # }

        3:在/etc/nginx/conf.d中添加站点A的配置文件(把域名和地址改成自己的)

    $ vim /etc/nginx/conf.d/a.conf
    
    server {
    	listen 80;
    	server_name www.a.com a.com;
    	rewrite ^(.*) https://www.a.com$1 permanent;
    
    }
    server {
        listen  443 ssl;
        ssl on;
        ssl_certificate 1_ www.a.com_bundle.crt;
        ssl_certificate_key 2_ www.a.com.key;
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        server_name  www.a.com;
        ssl_session_timeout 5m;
    
        client_max_body_size 200m;
        root 你的Aweb项目的目录(如/home/fangc/www/);
        access_log /var/log/nginx_access.log;
        error_log /var/log/nginx_error.log;
    
        location /static/{
            root 你的Aweb项目的/static/静态文件目录(如/home/fangc/www/);
        }
    
        location /media/{
            root 你的Aweb项目的/media/媒体文件目录(如/home/fangc/www/);
        }
    
        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_connect_timeout 10;
            proxy_read_timeout 10;
            proxy_pass http://127.0.0.1:8000/;
        }
        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

        4:添加站点B的配置文件

    $ vim /etc/nginx/conf.d/b.conf
    
    server {
        listen  80;
        server_name www.b.top;
    
        root 你的B web项目的目录(如/home/fangc/www2/);
        access_log /var/log/nginx_access2.log;
        error_log /var/log/nginx_error.log;
    
        location /static/{
            root 你的Bweb项目的/static/静态文件目录(如/home/fangc/www2/);
        }
    
        location /media/{
            root 你的Bweb项目的/media/媒体文件目录(如/home/fangc/www2/);
        }
    
        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_connect_timeout 10;
            proxy_read_timeout 10;
            proxy_pass http://127.0.0.1:8008/;
        }
    
        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

      5:重启nginx服务

    $ systemctl restrat nginx.service