2.1 准备工作

nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息。

正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。

  • ububtu平台编译环境可以使用以下指令
  1. apt-get install build-essential
  2. apt-get install libtool
  • centos平台编译环境使用如下指令

安装make

  1. yum -y install gcc automake autoconf libtool make

安装g++

  1. yum install gcc gcc-c++

2.2 正式安装

一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。

2.2.1 选定源码目录


可以是任何目录,本文选定的是/usr/local/src

2.2.2 安装PCRE库

  1. 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.39.tar.gz
  3. tar -zxvf pcre-8.34.tar.gz
  4. cd pcre-8.34
  5. ./configure
  6. make
  7. make install

2.2.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

2.2.4 安装ssl

  1. wget http://www.openssl.org/source/openssl-1.0.1t.tar.gz
  2. tar -zxvf openssl-1.0.1c.tar.gz
  3. ./config --prefix=/usr/local --openssldir=/usr/local/openssl
  4. make depend
  5. make
  6. sudo make install
  7. //若要生成libssl.so动态库文件 需要如下make
  8. make clean
  9. ./config shared --prefix=/usr/local --openssldir=/usr/local/openssl
  10. make depend
  11. make
  12. sudo make install

2.2.5 安装nginx

  1. cd /usr/local/src
  2. wget http://nginx.org/download/nginx-1.10.1.tar.gz
  3. tar -zxvf nginx-1.10.1.tar.gz
  4. cd nginx-1.10.1
  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=/usr/local/src/pcre-8.39
  10. --with-zlib=/usr/local/src/zlib-1.2.8
  11. --with-openssl=/usr/local/openssl
  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
  2. koi-win
  3. nginx.conf.default
  4. fastcgi.conf.default
  5. logs
  6. scgi_params
  7. fastcgi_params
  8. mime.types
  9. scgi_params.default
  10. fastcgi_params.default mime.types.default
  11. uwsgi_params
  12. html
  13. nginx
  14. uwsgi_params.default
  15. koi-utf
  16. nginx.conf
  17. win-utf

2.2.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 已经安装并运行成功。

04-nginx-web-welcome.png

Nginx会被安装在/usr/local/nginx目录下(也可以使用参数—prefix=指定自己需要的位置), 安装成功后 /usr/local/nginx 目录下有四个子目录分别是:**conf****html****logs****sbin** 。 其中 Nginx 的配置文件存放于 conf/nginx.conf, bin文件是位于 sbin 目录下的 nginx 文件。

确保系统的 80 端口没被其他程序占用,运行 /usr/local/nginx/nginx 命令来启动 Nginx, 打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功

2.2.7 通用配置

  1. #运行用户
  2. user nobody;
  3. #启动进程,通常设置成和cpu的数量相等
  4. worker_processes 1;
  5. #全局错误日志及PID文件
  6. #error_log logs/error.log;
  7. #error_log logs/error.log notice;
  8. #error_log logs/error.log info;
  9. #pid logs/nginx.pid;
  10. #工作模式及连接数上限
  11. events {
  12. #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
  13. #仅用于linux2.6以上内核,可以大大提高nginx的性能
  14. use epoll;
  15. #单个后台worker process进程的最大并发链接数
  16. worker_connections 1024;
  17. # 并发总数是 worker_processes 和 worker_connections 的乘积
  18. # 即 max_clients = worker_processes * worker_connections
  19. # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
  20. # 为什么上面反向代理要除以4,应该说是一个经验值
  21. # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
  22. # worker_connections 值的设置跟物理内存大小有关
  23. # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
  24. # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
  25. # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
  26. # $ cat /proc/sys/fs/file-max
  27. # 输出 34336
  28. # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
  29. # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
  30. # 使得并发总数小于操作系统可以打开的最大文件数目
  31. # 其实质也就是根据主机的物理CPU和内存进行配置
  32. # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
  33. # ulimit -SHn 65535
  34. }
  35. http {
  36. #设定mime类型,类型由mime.type文件定义
  37. include mime.types;
  38. default_type application/octet-stream;
  39. #设定日志格式
  40. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  41. '$status $body_bytes_sent "$http_referer" '
  42. '"$http_user_agent" "$http_x_forwarded_for"';
  43. access_log logs/access.log main;
  44. #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
  45. #对于普通应用,必须设为 on,
  46. #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
  47. #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
  48. sendfile on;
  49. #tcp_nopush on;
  50. #连接超时时间
  51. #keepalive_timeout 0;
  52. keepalive_timeout 65;
  53. tcp_nodelay on;
  54. #开启gzip压缩
  55. gzip on;
  56. gzip_disable "MSIE [1-6].";
  57. #设定请求缓冲
  58. client_header_buffer_size 128k;
  59. large_client_header_buffers 4 128k;
  60. #设定虚拟主机配置
  61. server {
  62. #侦听80端口
  63. listen 80;
  64. #也可以设置为 合法域名
  65. server_name localhost;
  66. #定义服务器的默认网站根目录位置
  67. root html;
  68. #设定本虚拟主机的访问日志
  69. access_log logs/nginx.access.log main;
  70. #默认请求
  71. location / {
  72. #定义如果访问根目录的请求目录
  73. root html;
  74. #定义首页索引文件的名称
  75. index index.php index.html index.htm;
  76. }
  77. # 定义错误提示页面
  78. error_page 500 502 503 504 /50x.html;
  79. location = /50x.html {
  80. }
  81. #静态文件,nginx自己处理
  82. location ~ ^/(images|javascript|js|css|flash|media|static)/ {
  83. #过期30天,静态文件不怎么更新,过期可以设大一点,
  84. #如果频繁更新,则可以设置得小一点。
  85. expires 30d;
  86. }
  87. #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
  88. location ~ .php$ {
  89. fastcgi_pass 127.0.0.1:9000;
  90. fastcgi_index index.php;
  91. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  92. include fastcgi_params;
  93. }
  94. #禁止访问 .htxxx 文件
  95. location ~ /.ht {
  96. deny all;
  97. }
  98. }
  99. }

2.3 启动与关闭

2.3.1 重启Nginx

  1. sudo /usr/local/sbin/nginx -s reload

2.3.2 关闭Nginx

快速停止服务

  1. sudo /usr/local/sbin/nginx -s stop
  1. sudo /usr/local/sbin/nginx -s quit #kill -s SIGQUIT pid_master
  2. kill -s SIGWINCH pid_master