1. Windows下安装

官网下载 http://nginx.org/
选择一个版本
image.png
点进去,选一个版本为Windows的,我这里选稳定版

Mainline version为主线版本也是最新版本

Stable version为稳定版本,生成环境使用这个版本

Legacy versions为以前的版本,旧版本在这里可以找到

image.png

下载文件,很小只有1M多,解压如下:
image.png

安装部署

1、下载完成后,解压缩,运行cmd,使用命令进行操作,

不要直接双击nginx.exe,不要直接双击nginx.exe,不要直接双击nginx.exe

一定要在dos窗口启动,不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程,再启动才可以

2、使用命令到达nginx的加压缩后的目录

cd c:\nginx-1.15.2

3、启动nginx服务,启动时会一闪而过是正常的

start nginx

4、查看任务进程是否存在,dos或打开任务管理器都行

tasklist /fi “imagename eq nginx.exe”
Ngnix安装 - 图4
打开任务管理器在进程中看不到nginx.exe的进程(双击nginx.exe时会显示在这里),需要打开详细信息里面能看到隐藏的nginx.exe进程
Ngnix安装 - 图5
如果都没有可能是启动报错了查看一下日志,在nginx目录中的logs文件夹下error.log是日志文件
Ngnix安装 - 图6
常见的错误:
(1)端口号被占用
(2)nginx文件夹路径含中文
其他错误就详细看log中的描述

5、修改配置文件,进入解压缩目录,直接文件夹点击进去即可,不需要从dos操作

Ngnix安装 - 图7
在conf目录下找到nginx.conf使用txt文本打开即可,找到server这个节点,修改端口号,如果有需求可以修改主页目录没有就不用修改
Ngnix安装 - 图8
修改完成后保存,使用以下命令检查一下配置文件是否正确,后面是nginx.conf文件的路径,successful就说明正确了
nginx -t -c /nginx-1.15.2/conf/nginx.conf
Ngnix安装 - 图9
如果程序没启动就直接start nginx启动,如果已经启动了就使用以下命令重新加载配置文件并重启
nginx -s reload
之后就打开浏览器访问刚才的域名及端口http://localhost:8800,出现欢迎页就说明部署成功了
Ngnix安装 - 图10

6、关闭nginx服务使用以下命令,同样也是一闪而过是正常的,看一下是否进程已消失即可

快速停止
nginx -s stop
完整有序的关闭
nginx -s quit

2.Mac OS安装

通过Homebrew 安装

  1. 安装brew

如果Mac安装了xcode,确保xcode打开过一次。
打开终端窗口, 粘贴以下脚本:

  1. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题。可以使用下面的命令修复:

  1. sudo chown -R `whoami` /usr/local

了解更多,可以浏览一下网址:
https://brew.sh/index_zh-cn.html

  1. 安装ngnix

在命令行终端执行:
brew install nginx
通过homebrewnginx默认被安装在/usr/local/Cellar/nginx/1.6.2, conf文件默认被安装在/usr/local/etc/nginx/nginx.conf
然后再浏览器中键入http://localhost:8080,即可访问到nginx的欢迎界面。
在开发过程中,我们可能还期望将端口去掉,绑定域名提供测试。
解决办法:
1. 创建新的目录conf.d,/usr/local/etc/nginx/conf.d
2. 创建单个服务所需的conf文件default.conf,
/usr/local/etc/nginx/conf.d/default.conf
3. 然后将nginx的主文件nginx.conf中的server{}删除,替换成 include /usr/local/etc/nginx/conf.d/*.conf, nginx将可以加载存放在conf.d目录下的所有conf文件了。
sudo nginx -s reload重启nginx。
如果遇到不能访问的情况,请前往nginx log目录:/usr/local/var/log/nginx/*.log,查看原因。

3.nginx在ubuntu上的安装

1、安装Nginx
apt-get install nginx
(要最新版本下载下来编译吧)
装完应该能正常运行了。如果之前有装APACHE要改下端口。。。或者直接
apt-get remove apache2
/etc/init.d/nginx stop
/etc/init.d/nginx start

4.centos安装ngnix

如果你Linux用的很熟练的话,我想这些程序你一定已经用yum安装过了,但是如果你还不熟悉Linux,你可以直接用yum进行安装就可以了。(然后自己百度一下这些东西的用处,这里不做过多的介绍了,只要照做就可以了)

  1. yum -y install gcc gcc-c++ autoconf pcre-devel make automake
  2. yum -y install wget httpd-tools vim

建立目录
其实这个目录你是可以不建立的,但是那样你的系统会很乱,不利于以后的运维。所以我这里根据本人的喜好建立如下目录。
步骤如下(此步骤根据自己喜欢建立):

  1. 进入系统后,在目录下建立了一个jspang的文件夹。
  2. 进入 jspang文件夹 ,命令是 cd jspang
  3. 分别使用mkdir建立 app,backup,download,logs,work文件夹。

我们可以先来查看一下yum是否已经存在,命令如下:

  1. yum list | grep nginx

如果出现类似下面的内容,说明yum源是存在的。
Ngnix安装 - 图11
(细心的小伙伴可以发现系统原来的源只支持1.1.12版本,这版本有些低)
如果不存在,或者不是你需要的版本,那我们可以自行配置yum源,下面是官网提供的源,我们可以放心大胆的使用。

  1. [nginx]
  2. name=nginx repo
  3. baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
  4. gpgcheck=0
  5. enabled=1

复制上面的代码,然后在终端里输入:

  1. vim /etc/yum.repos.d/nginx.repo

然后把代码复制进去,这里你可能需要一些Vim的操作知识,如果不熟悉,可以自行学习一下,当然我视频中也是有讲解的。
赋值完成后,你需要修改一下对应的操作系统和版本号,因为我的是centos和7的版本,所以改为这样。

  1. baseurl=http://nginx.org/packages/centos/7/$basearch/

你可以根据你的系统或需要的版本进行修改。
如果都已经准备好了,那就可以开始安装了,安装的命令非常简单:

  1. yum install nginx

安装完成后可以使用命令,来检测Nginx的版本。

  1. nginx -v

如果出现下面图片的内容,说明Nginx就安装成功了。
Ngnix安装 - 图12
到这里你就把最新版本的Nginx安装到了Linux系统中,也算是一个非常好的开始。小伙伴一定要动手作一下哦,听是听不会的,你需要动手作一下。
查看Nginx的安装目录
在使用yum安装完Nginx后,需要知道系统中多了那些文件,它们都安装到了那里。可以使用下面的命令进行查看:

  1. rpm -ql nginx

rpm 是linux的rpm包管理工具,-q 代表询问模式,-l 代表返回列表,这样我们就可以找到nginx的所有安装位置了。
列表列出的内容还是比较多的,我们尽量给大家进行讲解,我们这节先来看看重要的文件。

5. 源码编译安装

正式开始前,编译环境gcc g++ 开发库之类的需要提前装好

ububtu平台编译环境可以使用以下指令

  1. apt-get install build-essential
  2. apt-get install libtool

centos平台编译环境使用如下指令

  • 安装make:
  1. yum -y install gcc automake autoconf libtool
  2. make
  • 安装g++:
  1. yum install gcc gcc-c++

下面正式开始

—————————————————————————————————————-
一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。
1.选定源码目录
可以是任何目录,本文选定的是/usr/local/src

  1. cd /usr/local/src

2.安装PCRE库
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:

  1. cd /usr/local/src
  2. wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
  3. tar -zxvf pcre-8.37.tar.gz
  4. cd pcre-8.34
  5. ./configure
  6. make
  7. make install

3.安装zlib库
http://zlib.net/zlib-1.2.8.tar.gz 下载最新的 zlib 源码包,使用下面命令下载编译和安装 zlib包:

  1. cd /usr/local/src
  2. wget http://zlib.net/zlib-1.2.8.tar.gz
  3. tar -zxvf zlib-1.2.8.tar.gz
  4. cd zlib-1.2.8
  5. ./configure
  6. make
  7. make install

4.安装ssl(某些vps默认没装ssl)

  1. cd /usr/local/src
  2. wget https://www.openssl.org/source/openssl-1.0.1t.tar.gz
  3. tar -zxvf openssl-1.0.1t.tar.gz

5.安装nginx
Nginx 一般有两个版本,分别是稳定版和开发版,您可以根据您的目的来选择这两个版本的其中一个,下面是把 Nginx 安装到 /usr/local/nginx 目录下的详细步骤:

  1. cd /usr/local/src
  2. wget http://nginx.org/download/nginx-1.4.2.tar.gz
  3. tar -zxvf nginx-1.4.2.tar.gz
  4. cd nginx-1.4.2
  5. ./configure --sbin-path=/usr/local/nginx/nginx \
  6. --conf-path=/usr/local/nginx/nginx.conf \
  7. --pid-path=/usr/local/nginx/nginx.pid \
  8. --with-http_ssl_module \
  9. --with-pcre=/opt/app/openet/oetal1/chenhe/pcre-8.37 \
  10. --with-zlib=/opt/app/openet/oetal1/chenhe/zlib-1.2.8 \
  11. --with-openssl=/opt/app/openet/oetal1/chenhe/openssl-1.0.1t
  12. make
  13. make install

—with-pcre=/usr/src/pcre-8.34 指的是pcre-8.34 的源码路径。
—with-zlib=/usr/src/zlib-1.2.7 指的是zlib-1.2.7 的源码路径。
安装成功后 /usr/local/nginx 目录下如下

  1. fastcgi.conf koi-win nginx.conf.default
  2. fastcgi.conf.default logs scgi_params
  3. fastcgi_params mime.types scgi_params.default
  4. fastcgi_params.default mime.types.default uwsgi_params
  5. html nginx uwsgi_params.default
  6. koi-utf nginx.conf win-utf

6.启动
确保系统的 80 端口没被其他程序占用,运行/usr/local/nginx/nginx 命令来启动 Nginx,

  1. netstat -ano|grep 80

如果查不到结果后执行,有结果则忽略此步骤(ubuntu下必须用sudo启动,不然只能在前台运行)

  1. sudo /usr/local/nginx/nginx

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。
Ngnix安装 - 图13
——————————————————————————-
到这里nginx就安装完成了,如果只是处理静态html就不用继续安装了

下面安装排错

附:可能遇到的错误和一些帮助信息
1.1编译pcre错误

  1. libtool: compile: unrecognized option `-DHAVE_CONFIG_H'
  2. libtool: compile: Try `libtool --help' for more information.
  3. make[1]: *** [pcrecpp.lo] Error 1
  4. make[1]: Leaving directory `/usr/local/src/pcre-8.34'
  5. make: *** [all] Error 2

Ngnix安装 - 图14
解决办法:安装g++,别忘了重新configure

  1. apt-get install g++
  2. apt-get install build-essential
  3. make clean
  4. ./configure
  5. make

1.2 make出错

  1. make: *** No rule to make target `build', needed by `default'. Stop.
  2. ./configure: error: SSL modules require the OpenSSL library.
  3. You can either do not enable the modules, or install the OpenSSL library
  4. into the system, or build the OpenSSL library statically from the source
  5. with nginx by using --with-openssl=<path> option.

按照第4步的安装方法或
ubuntu下

  1. apt-get install openssl
  2. apt-get install libssl-dev

centos下

  1. yum -y install openssl openssl-devel

2.nginx编译选项
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
configure命令是用来检测你的安装平台的目标特征的。它定义了系统的各个方面,包括nginx的被允许使用的连接处理的方法,比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本,执行结束时,它会创建一个Makefile文件。nginx的configure命令支持以下参数:

  • --prefix=path` 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用/usr/local/nginx。`
  • --sbin-path=path设置nginx的可执行文件的路径,默认为prefix/sbin/nginx.
  • --conf-path=path设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf.
  • --pid-path=path 设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为```_prefix_/logs/nginx.pid`.
  • --error-log-path=path设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为prefix/logs/error.log.
  • --http-log-path=path设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为prefix/logs/access.log.
  • --user=name`` 设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。
  • --group=name`` 设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。
  • --with-select_module --without-select_module 启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
  • --with-poll_module --without-poll_module 启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
  • --without-http_gzip_module — 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。
  • --without-http_rewrite_module 不编译重写模块。编译并运行此模块需要PCRE库支持。
  • --without-http_proxy_module — 不编译http_proxy模块。
  • --with-http_ssl_module — 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
  • --with-pcre=path`` — 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。
  • --with-pcre-jit —编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
  • --with-zlib=path`` —设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。
  • --with-cc-opt=parameters` — 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:—with-cc-opt=”-I /usr/local/include。.如需要需要增加select()支持的文件数量:—with-cc-opt=”-D FD_SETSIZE=2048”.`
  • --with-ld-opt=parameters` —设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:—with-ld-opt=”-L /usr/local/lib”.`

典型实例(下面为了展示需要写在多行,执行时内容需要在同一行)

  1. ./configure
  2. --sbin-path=/usr/local/nginx/nginx
  3. --conf-path=/usr/local/nginx/nginx.conf
  4. --pid-path=/usr/local/nginx/nginx.pid
  5. --with-http_ssl_module
  6. --with-pcre=../pcre-4.4
  7. --with-zlib=../zlib-1.1.3

Ngnix优化配置

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

  1. #user nobody;
  2. #==工作进程数,一般设置为cpu核心数
  3. worker_processes 1;
  4. #error_log logs/error.log;
  5. #error_log logs/error.log notice;
  6. #error_log logs/error.log info;
  7. #pid logs/nginx.pid;
  8. events {
  9. #==最大连接数,一般设置为cpu*2048
  10. worker_connections 1024;
  11. }
  12. http {
  13. include mime.types;
  14. default_type application/octet-stream;
  15. #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  16. # '$status $body_bytes_sent "$http_referer" '
  17. # '"$http_user_agent" "$http_x_forwarded_for"';
  18. #access_log logs/access.log main;
  19. sendfile on;
  20. #tcp_nopush on;
  21. #keepalive_timeout 0;
  22. #==客户端链接超时时间
  23. keepalive_timeout 65;
  24. #gzip on;
  25. #当配置多个server节点时,默认server names的缓存区大小就不够了,需要手动设置大一点
  26. server_names_hash_bucket_size 512;
  27. #server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点
  28. #每一个请求进来确定使用哪个server由server_name确定
  29. server {
  30. #站点监听端口
  31. listen 8800;
  32. #站点访问域名
  33. server_name localhost;
  34. #编码格式,避免url参数乱码
  35. charset utf-8;
  36. #access_log logs/host.access.log main;
  37. #location用来匹配同一域名下多个URI的访问规则
  38. #比如动态资源如何跳转,静态资源如何跳转等
  39. #location后面跟着的/代表匹配规则
  40. location / {
  41. #站点根目录,可以是相对路径,也可以使绝对路径
  42. root html;
  43. #默认主页
  44. index index.html index.htm;
  45. #转发后端站点地址,一般用于做软负载,轮询后端服务器
  46. #proxy_pass http://10.11.12.237:8080;
  47. #拒绝请求,返回403,一般用于某些目录禁止访问
  48. #deny all;
  49. #允许请求
  50. #allow all;
  51. add_header 'Access-Control-Allow-Origin' '*';
  52. add_header 'Access-Control-Allow-Credentials' 'true';
  53. add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  54. add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
  55. #重新定义或者添加发往后端服务器的请求头
  56. #给请求头中添加客户请求主机名
  57. proxy_set_header Host $host;
  58. #给请求头中添加客户端IP
  59. proxy_set_header X-Real-IP $remote_addr;
  60. #将$remote_addr变量值添加在客户端“X-Forwarded-For”请求头的后面,并以逗号分隔。 如果客户端请求未携带“X-Forwarded-For”请求头,$proxy_add_x_forwarded_for变量值将与$remote_addr变量相同
  61. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  62. #给请求头中添加客户端的Cookie
  63. proxy_set_header Cookie $http_cookie;
  64. #将使用代理服务器的主域名和端口号来替换。如果端口是80,可以不加。
  65. proxy_redirect off;
  66. #浏览器对 Cookie 有很多限制,如果 Cookie 的 Domain 部分与当前页面的 Domain 不匹配就无法写入。
  67. #所以如果请求 A 域名,服务器 proxy_pass 到 B 域名,然后 B 服务器输出 Domian=B 的 Cookie,
  68. #前端的页面依然停留在 A 域名上,于是浏览器就无法将 Cookie 写入。
  69.    #不仅是域名,浏览器对 Path 也有限制。我们经常会 proxy_pass 到目标服务器的某个 Path 下,
  70. #不把这个 Path 暴露给浏览器。这时候如果目标服务器的 Cookie 写死了 Path 也会出现 Cookie 无法写入的问题。
  71. #设置“Set-Cookie”响应头中的domain属性的替换文本,其值可以为一个字符串、正则表达式的模式或一个引用的变量
  72. #转发后端服务器如果需要Cookie则需要将cookie domain也进行转换,否则前端域名与后端域名不一致cookie就会无法存取
  73.        #配置规则:proxy_cookie_domain serverDomain(后端服务器域) nginxDomain(nginx服务器域)
  74. proxy_cookie_domain localhost .testcaigou800.com;
  75. #取消当前配置级别的所有proxy_cookie_domain指令
  76. #proxy_cookie_domain off;
  77. #与后端服务器建立连接的超时时间。一般不可能大于75秒;
  78. proxy_connect_timeout 30;
  79. }
  80. #error_page 404 /404.html;
  81. # redirect server error pages to the static page /50x.html
  82. #
  83. error_page 500 502 503 504 /50x.html;
  84. location = /50x.html {
  85. root html;
  86. }
  87. }
  88.   #当需要对同一端口监听多个域名时,使用如下配置,端口相同域名不同,server_name也可以使用正则进行配置
  89.   #但要注意server过多需要手动扩大server_names_hash_bucket_size缓存区大小
  90.   server {
  91.     listen 80;
  92.     server_name www.abc.com;
  93.     charset utf-8;
  94.     location / {
  95.       proxy_pass http://localhost:10001;
  96.     }
  97.   }
  98.   server {
  99.     listen 80;
  100.     server_name aaa.abc.com;
  101.     charset utf-8;
  102.     location / {
  103.       proxy_pass http://localhost:20002;
  104.     }
  105.   }
  106. }