网络技术

当前位置:首页 > 网络技术

Windows环境下Nginx部署及Https设置

一、Nginx安装部署及常用命令。

 1.1、其实Nginx是免安装的。直接在官网下载zip包,解压即可,下载地址:http://nginx.org/en/download.html,因为我这边的开发服务器是阿里云windows服务器,所以我下载的是对应的windows版本(当时下载的是1.15.9版本)

下载完成解压即可。

1.2   Nginx基本配置,配置文件路径: 安装路径下的conf文件夹下的nginx.conf。Nginx默认启动端口是80,在服务器上注意不要和tomcat冲突

     负载均衡配置如下:

     这里,我配置了两个项目,分别命名为:boot和product,示例配置只配置了boot项目的访问,其实配置第二个时候和第一个一样,只需再复制一个service,端口也是80,修改service_name(可指定为具体域名)及proxy_pass为product项目

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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream  boot {  #服务器集群名字   
      ip_hash; #同一个用户指定访问一台服务,保证session可用
      server  192.168.20.122:8090  weight=1; #weight设置访问权重,值越大,访问概率越高
      server  192.168.20.101:8090  weight=1; 
    } 
    upstream  product {  #可以指定多个项目 
      server  192.168.20.122:8099 weight=1; 
    } 

  server {
        listen       80;
        server_name  localhost;#此处可以设置为项目域名如:www.baidu.com

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

 
        location / {                #代理转向到那个项目
                proxy_pass http://boot; 
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

1.3、Nginx常用命令

      我这里的解压路径是 C:\Program Files\nginx,以下操作都是基于此路径。

     1、启动

         cd C:\Program Files\nginx\nginx-1.15.9nginx.conf
         nginx.exe

     2、刷新(重新加载)

        nginx -s reload

     3、停止(有时候该命令并不好用,可以直接在任务管理器,进程中找到nginx.exe并结束)

       nginx -s quit

 

二、Nginx下Https设置

1、https证书获取有很多途径,我这里使用的阿里云提供的免费证书(每个阿里云 账号可免费申请20个Https证书)。登陆阿里云平台,搜索ssl,购买证书如下:

 

购买完成后跳转管理页面:

购买完成后下个流程是验证,这里没有截图直接跳过了,验证页面最主要的信息是绑定域名,其他的可以按照默认设置,联系方式填下,按照指引逐步操作,最后等待审核通过就行了,一般审核很快(半个小时以内)。

 

审核完成后,选择购买的ssl,点击下载,选择Nginx,剩下的就按照阿里云帮助文档配置就行了

 

 

 证书下载完成后,把里面的pem和key文件复制,然后在Nginx安装目录下的conf文件目录下新建文件夹cert,并将证书文件复制进去

准备工作完成后,最后配置Nginx配置文件nginx.conf,删除原有的service,添加如下配置

server {
       
        listen 443 ssl;
        server_name www.baidu.com; #修改为申请证书绑定的域名
        
        root html;
        index index.html index.htm;
        ssl_certificate   cert/XXX.pem;
        ssl_certificate_key  cert/XXX.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
                proxy_pass http://boot; 
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
    }

    server {

        listen       80;
        server_name  www.baidu.com; #修改为申请证书绑定的域名
        rewrite ^(.*)$ https://${server_name}$1 permanent; 
    }

注:在阿里云ECS上部署的使用,一定要去安全组规则里面打开443端口(默认是关闭的),否则是无法使用https的

 

通过上面配置,则项目只能通过https访问(http会重定向到https),如果向同时使用https和http,则删除第二个service(监听80端口并控制重定向),同时在第一个service 的listen 443 ssl前面加上listen 80 default backlog=2048;

这样则完成了http和https的并行访问。

 

总结:如果有多个项目需要用Nginx代理,则复制上面的service,修改证书(如果是https的话)及项目(proxy_pass)。


上一篇:MSR8X0/9X0系列路由器L2TP VPN(Web)配置方法

下一篇:已经是最后一篇