Windows下部署nginx

  1. Windows下部署nginx

    下载nginx-Windows

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站点(俄文:Рамблер)开发的.
    它也是一种轻量级的Web服务器,可以作为独立的服务器部署网站(类似Tomcat)。它高性能和低消耗内存的结构受到很多大公司青睐,如淘宝网站架设

    先下载直接去官网 下载地址 有linux和windows版本
    image.png

    安装部署

    1. 下载完成后,解压缩,运行cmd,使用命令进行操作,不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe
      一定要在dos窗口启动,不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程,再启动才可以。
    2. 在解压目录下按住shift+右键 点击power shell
      image.png
    3. 启动nginx服务,启动时会一闪而过是正常的
      start nginx
    4. 查看任务进程是否存在,dos或打开任务管理器都行
      tasklist /fi "imagename eq nginx.exe"
      image.png
      打开任务管理器在进程中看不到nginx.exe的进程(双击nginx.exe时会显示在这里),需要打开详细信息里面能看到隐藏的nginx.exe进程
      image.png
      如果都没有可能是启动报错了查看一下日志,在nginx目录中的logs文件夹下error.log是日志文件
      image.png
    5. 修改配置文件,进入解压缩目录,直接文件夹点击进去即可,不需要从dos操作
      image.png
      在conf目录下找到nginx.conf使用txt文本打开即可,找到server这个节点,修改端口号,如果有需求可以修改主页目录没有就不用修改
      image.png
      修改完成后保存,使用以下命令检查一下配置文件是否正确,后面是nginx.conf文件的路径,successful就说明正确了
      image.png
      如果程序没启动就直接start nginx启动,如果已经启动了就使用以下命令重新加载配置文件并重启
      nginx -s reload
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    server {
    listen 6666;
    server_name smxy.xyz;
    client_max_body_size 10M;
    ssl on;
    ssl_certificate smxy.xyz_bundle.crt;
    ssl_certificate_key smxy.xyz.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location = /halo {
    root /usr/share/nginx/html;
    index index.html index.htm;
    proxy_pass http://127.0.0.1:8888;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    proxy_pass http://127.0.0.1:8888;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    1. 关闭nginx服务使用以下命令,同样也是一闪而过是正常的,看一下是否进程已消失即可
      快速停止
      nginx -s stop
      完整有序的关闭
      nginx -s quit

    优化nginx配置

    打开nginx.conf按照自己需求进行配置,下面列出简单的一些常规调优配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    #user  nobody;

    #==工作进程数,一般设置为cpu核心数
    worker_processes 1;

    #error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;

    #pid logs/nginx.pid;


    events {

    #==最大连接数,一般设置为cpu*2048
    worker_connections 1024;
    }


    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;

    #当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点
    server_names_hash_bucket_size 512;

    #server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点
    #每一个请求进来确定使用哪个server由server_name确定
    server {
    #站点监听端口
    listen 8800;
    #站点访问域名
    server_name localhost;

    #编码格式,避免url参数乱码
    charset utf-8;

    #access_log logs/host.access.log main;

    #location用来匹配同一域名下多个URI的访问规则
    #比如动态资源如何跳转,静态资源如何跳转等
    #location后面跟着的/代表匹配规则
    location / {
    #站点根目录,可以是相对路径,也可以使绝对路径
    root html;
    #默认主页
    index index.html index.htm;

    #转发后端站点地址,一般用于做软负载,轮询后端服务器
    #proxy_pass http://10.11.12.237:8080;

    #拒绝请求,返回403,一般用于某些目录禁止访问
    #deny all;

    #允许请求
    #allow all;

    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    #重新定义或者添加发往后端服务器的请求头
    #给请求头中添加客户请求主机名
    proxy_set_header Host $host;
    #给请求头中添加客户端IP
    proxy_set_header X-Real-IP $remote_addr;
    #将$remote_addr变量值添加在客户端“X-Forwarded-For”请求头的后面,并以逗号分隔。 如果客户端请求未携带“X-Forwarded-For”请求头,$proxy_add_x_forwarded_for变量值将与$remote_addr变量相同
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #给请求头中添加客户端的Cookie
    proxy_set_header Cookie $http_cookie;
    #将使用代理服务器的主域名和端口号来替换。如果端口是80,可以不加。
    proxy_redirect off;

    #浏览器对 Cookie 有很多限制,如果 Cookie 的 Domain 部分与当前页面的 Domain 不匹配就无法写入。
    #所以如果请求 A 域名,服务器 proxy_pass 到 B 域名,然后 B 服务器输出 Domian=B 的 Cookie,
    #前端的页面依然停留在 A 域名上,于是浏览器就无法将 Cookie 写入。

       #不仅是域名,浏览器对 Path 也有限制。我们经常会 proxy_pass 到目标服务器的某个 Path 下,
    #不把这个 Path 暴露给浏览器。这时候如果目标服务器的 Cookie 写死了 Path 也会出现 Cookie 无法写入的问题。

    #设置“Set-Cookie”响应头中的domain属性的替换文本,其值可以为一个字符串、正则表达式的模式或一个引用的变量
    #转发后端服务器如果需要Cookie则需要将cookie domain也进行转换,否则前端域名与后端域名不一致cookie就会无法存取
           #配置规则:proxy_cookie_domain serverDomain(后端服务器域) nginxDomain(nginx服务器域)
    proxy_cookie_domain localhost .testcaigou800.com;

    #取消当前配置级别的所有proxy_cookie_domain指令
    #proxy_cookie_domain off;
    #与后端服务器建立连接的超时时间。一般不可能大于75秒;
    proxy_connect_timeout 30;
    }

    #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;
    }

    }

      #当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置
      #但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小
      server {
        listen 80;
        server_name www.abc.com;
        charset utf-8;
        location / {
          proxy_pass http://localhost:10001;
        }
      }
      server {
        listen 80;
        server_name aaa.abc.com;
        charset utf-8;
        location / {
          proxy_pass http://localhost:20002;
        }
      }
    }

HTTP 自动跳转 HTTPS 的安全配置(可选)

若您不了解通过 HTTPS 访问网站的方式,可以通过配置服务器,让其自动将 HTTP 的请求重定向到 HTTPS。您可以通过以下操作设置:

根据实际需求,选择以下配置方式:
1. 在页面中添加 JS 脚本。
2. 在后端程序中添加重定向。
3. 通过 Web 服务器实现跳转。
Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加 rewrite ^(.*) https://$host$1 permanent;,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
listen 443;
#填写绑定证书的域名
server_name www.domain.com;
ssl on;
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
root /var/www/www.domain.com;
index index.html index.htm;
#证书文件名称
ssl_certificate 1_www.domain.com_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_www.domain.com.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 / {
index index.html index.htm;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name www.domain.com;
#把http的域名请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}

如果有特殊端口定制请根据一下修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
server {
listen 8899 ssl;
server_name smxy.xyz;
client_max_body_size 10M;
ssl_certificate smxy.xyz_bundle.crt;
ssl_certificate_key smxy.xyz.key;
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 / {
# root html;
# index index.html index.htm;
# }
# location /service1{
# proxy_pass http://smxy.xyz:8888;
# }
location = /halo {
# root /usr/share/nginx/html;
# index index.html index.htm;
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
proxy_pass http://127.0.0.1:8888;
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 81;
#填写绑定证书的域名
server_name smxy.xyz;
#把http的域名请求转成https
rewrite ^/(.*)$ https://www.smxy.xyz:8899/$1 permanent;
}
## nginx301永久重定向 建站过程中进展会遇到搜索引擎收录带www和不带www的@两个域名的相同站点,影响排名。 这时候我们可以把其中一个域名301永久重定向到另一个域名传递权重,不推荐停止解析其中任何一个。 谷歌对301的反应快一些,百度需要一段时候后才能识别301。 重定向三种方法 方法一
1
2
3
4
5
6
7
8
server{  
listen 80;
server_name XXXXX.com; //你的域名
rewrite ^(.*)$ https://XXXXXX.com permanent;
location ~ / {
index index.html index.php index.htm;
}
}
方法二
1
2
3
4
5
6
7
8
server{  
listen 80;
server_name XXXXX.com; //你的域名
return 301 https://$server_name$request_uri;
location ~ / {
index index.html index.php index.htm;
}
}
方法三
1
2
3
4
5
6
7
8
server{  
listen 80;
server_name XXXXX.com; //你的域名
rewrite ^(.*)$ https://$host$1 permanent;
location ~ / {
index index.html index.php index.htm;
}
}
## meta刷新作用将http跳转到HTTPS index.html <html> <meta http-equiv=”refresh” content=”0;url=https://XXXX.com/”> </html> nginx配置
1
2
3
4
5
6
7
8
9
server{  
listen 80;
server_name XXXXX.com; //你的域名
location ~ / {
root /var/www/test/;
index index.html index.php index.htm;
}
error_page 404 https://xxxx.com
}

常见错误

  1. 不能在配置证书时候使用绝对路径
    image.png
  2. 证书文件必须放在nginx/conf下方可识别
    image.png
  3. 端口已经被占用
    image.png
  4. nginx: [error] CreateFile() “E:\nginx\nginx-1.9.3/logs/nginx.pid” failed
    image.png

解决方法:
使用命令创建/logs/nginx.pid文件:

nginx -c conf/nginx.conf

或者用管理员权限cmd

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信