Nginx编译参数详解

从源代码编译应用程序时通常有三个步骤:配置,编译和安装。 配置步骤允许您选择一些在程序编译后无法编辑的选项,因为它对程序二进制文件有直接影响。 因此,这是一个非常重要的阶段,你需要仔细选择,如果你想避免后面的麻烦,如缺乏一个特定的模块或配置文件位于一个随机文件夹等。

简单安装

如果由于某种原因,您不想使安装这么麻烦(例如用于测试目的或仅仅因为您以后会重新编译程序),则可以直接使用不带参数的configure命令。 执行以下三个命令来编译和安装Nginx的工作版本,从configure命令开始:

  1. [[email protected] nginx-1.8.0]# ./configure

运行此命令需要比较长的时间来进行验证过程,以确保您的系统包含所有必需的组件。 如果配置过程失败,请再次检查安装依赖部分,因为它是错误的最常见原因。 有关命令失败原因的信息,您还可以参考objs/autoconf.err文件,其中提供了更详细的报告。 make命令将编译应用程序。 只要配置正确,此步骤不应出现任何错误。

  1. [[email protected] nginx-1.8.0]# make
  2. [[email protected] nginx-1.8.0]# make install

这最后一步将编译文件以及其他资源复制到安装目录,默认是/usr/local/nginx。

Path选项

参数 用途 默认值
–prefix=… Nginx安装的基础目录 /usr/local/nginx
–sbin-path=… Nginx二进制安装目录 /sbin/nginx.
–conf-path=… 主配置文件安装位置 /conf/nginx.conf.
–error-log-path=… 错误日志位置 /logs/error.log.
–pid-path=… Nginx pid文件路径,可以在配置文件指定 /logs/nginx.pid.
–lock-path=… 锁文件位置 /logs/nginx.lock.
–with-perl_
modules_path=…
Perl模块位置
–with-perl=… Perl二进制文件路径
–http-log-
path=…
访问日志路径,可以在配置文件指定 /logs/access.log.
–http-client-
body-temp-path=…
存放由客户端请求生成的临时文件路径 /client_body_temp.
–http-proxy-
temp-path=…
proxy产生的临时文件路径 /proxy_temp.
–http-fastcgi-
temp-path=…
–http-uwsgi-
temp-path=…
–http-scgi-
temp-path=…
由HTTP,FastCGI, uWSGI和SCGI模块产生的临时文件路径 / fastcgi_temp,
/uwsgi_temp, and /scgi_temp.

依赖选项

依赖以库和二进制文件的形式出现。 现在,它们应该已经全部安装在您的系统上了。 但是,即使它们存在于您的系统上,也有可能出现配置脚本无法找到它们的情况。 原因可能有所不同,例如,如果它们安装在非标准目录中。
为了解决这些问题,您可以使用以下选项来指定依赖的路径(其他依赖相关选项已组合在一起):

编译选项 描述
–with-cc=… 指定C编译器的备用位置。
–with-cpp=… 指定C预处理器的备用位置。
–with-cc-opt=… 定义要传递到C编译器命令行的其他选项。
–with-ld-opt=… 定义要传递到C链接器命令行的其他选项。
–with-cpu-opt=… 在以下值中指定不同的目标处理器体系结构:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,sparc32,sparc64和ppc64。
PCRE选项 描述
–without-pcre 禁用PCRE库的使用。 不建议使用此设置,因为它将删除对正则表达式的支持,从而禁用Rewrite模块。
–with-pcre 强制使用PCRE库。
–with-pcre=… 允许您指定PCRE库源代码的路径。
–with-pcre-opt=… 构建PCRE库的其他选项。
–with-pcre-jit=… 构建PCRE与JIT编译的支持。
MD5选项 描述
–with-md5=… 指定MD5库源的路径。
–with-md5-opt=… 用于构建MD5库的其他选项。
–with-md5-asm 为MD5库指定汇编源。
SHA1选项 描述
–with-sha1=… 指定SHA1库源的路径。
–with-sha1-opt=… 构建SHA1库的其他选项。
–with-sha1-asm 为SHA1库指定汇编器源。
zlib选项 描述
–with-zlib=… 指定zlib library源的路径。
–with-zlib-opt=… 用于构建zlib库的其他选项。
–with-zlib-asm=… 为zlib库指定汇编器源。
OpenSSL选项 描述
–with-openssl=… 指定OpenSSL库源的路径。
–with-openssl-opt=… 用于构建OpenSSL库的其他选项。

模块选项

在编译程序之前,需要指定要安装的模块。 有些是默认启用的,有些需要手动启用,如下表所示。

默认启用的模块

以下参数允许您禁用默认情况下启用的模块:
–without-http_charset_module
–without-http_gzip_module
–without-http_ssi_module
–without-http_userid_module
–without-http_access_module
–without-http_access_module
–without-http_autoindex_module
–without-http_geo_module
–without-http_map_module
–without-http_referer_module
–without-http_rewrite_module
–without-http_proxy_module
–without-http_fastcgi_module
–without-http_uwsgi_module
–without-http_scgi_module
–without-http_memcached_module
–without-http_limit_conn_module
–without-http_limit_req_module
–without-http_empty_gif_module
–without-http_browser_module
–without-http_upstream_ip_hash_module
–without-http_upstream_least_conn_module
–without-http_split_clients_module

默认禁用的模块

以下参数允许您启用默认禁用的模块:
–with-http_ssl_module
–with-http_realip_module
–with-http_addition_module
–with-http_xslt_module
–with-http_image_filter_module
–with-http_geoip_module
–with-http_sub_module
–with-http_dav_module
–with-http_flv_module
–with-http_mp4_module
–with-http_gzip_static_module
–with-http_random_index_module
–with-http_secure_link_module
–with-http_stub_status_module
–with-google_perftools_module
–with-http_degradation_module
–with-http_perl_module
–with-http_spdy_module
–with-http_gunzip_module
–with-http_auth_request_module

Nginx使用教程(一):下载并编译安装Nginx

安装依赖

我们已经选择下载程序源代码进行手动编译,而不是使用软件包管理器(如Yum,Aptitude或Yast)进行安装。 这个选择有两个原因。 首先,软件包可能不包含在您的Linux发行版的存储库中。 此外,提供下载和安装Nginx的存储库经常包含比较旧的版本。 更重要的是,你可能需要配置各种各样的编译选项。 由于选择了手动编译,你的系统需要一些工具和库进行编译安装。
根据您在编译时选择的模块,您可能需要不同的依赖。 下面介绍最常见的依赖,如GCC,PCRE,zlib和OpenSSL。

The GNU Compiler Collection

Nginx是用C编写的程序,因此您首先需要在系统上安装一个编译器工具,如GNU编译器集合(GCC)。 GCC可能已经安装在您的系统上,如果没有,必须先安装它。
首先,通过运行以下命令确保系统上尚未安装GCC:
[[email protected] ~]$ gcc
如果您得到以下输出,这意味着GCC已经正确安装在您的系统上了,您可以跳到下一部分:
gcc: no input files
如果收到以下消息,则必须继续安装编译器:
~bash: gcc: command not found
对于CentOS系统:

  1. [[email protected] ~]# yum groupinstall "Development Tools"

对于Ubuntu系统:

  1. [[email protected] ~]# apt-get install build-essentials

PCRE库

需要Perl兼容的正则表达式(PCRE)库来编译Nginx。 Nginx的Rewrite和HTTP核心模块使用PCRE作为其正则表达式的语法,在后面的章节中将会发现。 您将需要安装两个软件包:pcre和pcre-devel。 第一个包提供了编译版本的库,而第二个包提供了开发头文件和源文件来编译项目。
如果使用yum,运行以下命令安装:

  1. [[email protected] ~]# yum install pcre pcre-devel

如果使用apt-get,运行以下命令安装:

  1. [[email protected] ~]# apt-get install libpcre3 libpcre3-dev

zlib库

zlib库为开发人员提供了压缩算法。 在Nginx的各个模块中使用的gzip压缩功能需要zlib库。 同样,您可以使用您的包管理器来安装此组件,因为它默认存在于存储库中。 类似于PCRE,您将需要库及其源进行安装:zlib和zlib-devel。
如果使用yum,运行以下命令安装:

  1. [[email protected] ~]# yum install zlib zlib-devel

如果使用apt-get,运行以下命令安装:

  1. [[email protected] ~]# apt-get install zlib1g zlib1g-dev

OpenSSL

Nginx使用OpenSSL库来提供ssl连接。 因此,我们需要安装openssl库及其开发包。需要安装openssl和openssl-devel:
如果使用yum,运行以下命令安装:

  1. [[email protected] ~]# yum install openssl openssl-devel

如果使用apt-get,运行以下命令安装:

  1. [[email protected] ~]# apt-get install openssl openssl-dev

现在您已经安装了所有依赖条件,可以下载并编译Nginx源代码了。

下载Nginx

一旦您选择了要使用的版本,请打开http://www.nginx.org并找到您要下载的文件的URL。并使用wget下载该文件:

  1. [[email protected] ~]$ mkdir src && cd src
  2. [[email protected] src]$ wget http://nginx.org/download/nginx-1.10.2.tar.gz
  3. [[email protected] src]$ tar zxf nginx-1.10.2.tar.gz

您已成功下载并解压Nginx。 现在,下一步将是配置编译过程。

编译参数

http://devops.webres.wang/2016/10/nginx-configure-parameter/

管理Nginx进程

http://devops.webres.wang/2016/10/nginx-main-program-intro/

添加Nginx到系统服务

http://devops.webres.wang/2016/10/adding-nginx-as-a-system-service/

Debian 8使用Apache部署Ruby on Rails

Ruby on Rails是一个快速开发的Web框架,Web设计人员和开发人员利用它能实现动态的全功能Web应用程序。 本文使用Phusion Passenger或mod_rails方法部署Rails应用程序。 Passenger允许您直接在Apache应用程序中嵌入Rails应用程序,而无需使用FastCGI或复杂的Web服务器代理。

安装Passenger和依赖关系

1.安装使用Ruby,构建Ruby模块和运行Rails应用程序所需的系统包:

  1. sudo apt-get install build-essential libapache2-mod-passenger apache2 ruby ruby-dev libruby zlib1g-dev libsqlite3-dev

2.使用gem模块的gem包管理器,安装fastthread gem:

  1. sudo gem install fastthread

3.安装Ruby On Rails:

  1. sudo gem install rails

4.(可选)为您的应用程序安装其他依赖项,例如MySQL支持:

  1. sudo apt-get install mysql-server libmysqlclient-dev mysql-client mysql-common
  2. sudo gem install mysql

5.将rails添加到$PATH环境变量。 请确保用正在运行的Ruby版本替换VERSION:

  1. ls /var/lib/gems
  2. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/VERSION/bin"

6.在您的网站的公共文件夹中启动一个新的rails项目,以确保一切正常配置。 替换为你的应用程序名称:

  1. sudo rails new /var/www/html/example.com/public_html/application

配置Apache以使用Passenger

1.打开配置文件,调整DocumentRoot
/etc/apache2/sites-available/example.com.conf:

  1. DocumentRoot /var/www/html/example.com/application/public

2.重启Apache

  1. sudo systemctl restart apache2

部署多个Rails应用程序

有许多方法可以使用Passenger部署多个Rails应用程序。 最简单的方法是运行如上配置的多个不同的虚拟主机来托管单个Rails应用程序。 或者,您可以在单个虚拟主机中托管多个Rails应用程序。 本节介绍一个。
1.添加RailsBaseURI指令,指定虚拟主机配置中Rails应用程序的路径,如以下示例所示:
/etc/apache2/sites-available/example.com.conf:

  1. DocumentRoot /var/www/html/example.com/public_html/
  2. RailsBaseURI /app1
  3. RailsBaseURI /app2
  4. RailsBaseURI /app3

这些指令配置Passenger在example.com站点上指定的三个位置运行三个Rails应用程序。
2.将应用程序的public/目录链接到public_html/的子目录:

  1. ln -s /var/www/html/example.com/app1/public/ /var/www/html/example.com/public_html/app1/
  2. ln -s /var/www/html/example.com/app1/app2/ /var/www/html/example.com/public_html/app2/
  3. ln -s /var/www/html/example.com/app1/app3/ /var/www/html/example.com/public_html/app3/

Ubuntu 14.04使用Unicorn Nginx部署Ruby on Rails应用

Ruby on Rails是一个流行的快速开发Web框架,网页设计师和开发人员可以借助它使用Ruby编程语言实现功能齐全的动态Web应用程序。 本文介绍使用Unicorn部署Ruby on Rails和在Ubuntu 14.04上部署Nginx Web服务器。

安装必要软件包

使用以下命令更新系统的存储库数据库和安装的软件包:

  1. apt-get update
  2. apt-get upgrade

安装Ruby

1.安装Ruby依赖

  1. sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs

2.下载最新版本的Ruby。

  1. wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz

3.解压

  1. tar -xzvf ruby-2.3.0.tar.gz

4.切换目录

  1. cd ruby-2.3.0

5.编译安装

  1. ./configure
  2. make
  3. sudo make install

安装并创建一个Rails应用

1.使用gem(Ruby的包管理框架)在服务器上安装Rails:

  1. sudo gem install rails

2.切换到家目录

  1. cd

3.创建一个新的Rails项目。 使用example作为项目名称:

  1. rails new example

4.切换到项目目录

  1. cd example

安装配置Unicorn

1.使用gem在服务器上安装Unicorn:

  1. sudo gem install unicorn

2.创建文件config/unicorn.rb,其中包含unicorn配置,并将以下配置粘贴到文件中。
/home/username/example/config/unicorn.rb:

  1. # set path to the application
  2. app_dir git File.expand_path("../..", __FILE__)
  3. shared_dir = "#{app_dir}/shared"
  4. working_directory app_dir
  5.  
  6. # Set unicorn options
  7. worker_processes 2
  8. preload_app true
  9. timeout 30
  10.  
  11. # Path for the Unicorn socket
  12. listen "#{shared_dir}/sockets/unicorn.sock", :backlog => 64
  13.  
  14. # Set path for logging
  15. stderr_path "#{shared_dir}/log/unicorn.stderr.log"
  16. stdout_path "#{shared_dir}/log/unicorn.stdout.log"
  17.  
  18. # Set proccess id path
  19. pid "#{shared_dir}/pids/unicorn.pid"

3.现在,创建Unicorn配置文件中涉及到的目录:

  1. mkdir -p shared/pids shared/sockets shared/log

安装配置Nginx

1.安装Nginx

  1. sudo apt-get install nginx

2.我们需要配置nginx作为反向代理。 编辑配置文件/etc/nginx/nginx.conf并将以下配置粘贴到HTTP块中:

  1. upstream rails {
  2. # Path to Unicorn socket file
  3. server unix:/home/username/example/shared/sockets/unicorn.sock fail_timeout=0;
  4. }

3.删除默认的nginx站点配置:

  1. sudo rm /etc/nginx/sites-enabled/default

4.为Rails应用程序创建新的nginx站点配置文件:
/etc/nginx/sites-available/example:

  1. server {
  2. listen 80;
  3. server_name localhost;
  4.  
  5. root /home/username/example;
  6.  
  7. try_files $uri/index.html $uri @rails;
  8.  
  9. location @rails {
  10.    proxy_pass http://rails;
  11.    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12.     proxy_set_header Host $http_host;
  13.    proxy_redirect off;
  14. }
  15.  
  16. error_page 500 502 503 504 /500.html;
  17. client_max_body_size 4G;
  18. keepalive_timeout 10;
  19. }

5.创建指向nginx sites-enabled目录的软链接以启用站点配置文件:

  1. sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled

6.重启Nginx

  1. sudo service nginx restart

启动Unicorn

以开发环境模式启动Unicorn:

  1. sudo unicorn -c config/unicorn.rb -E development -D

以生产环境模式启动Unicorn:

  1. sudo unicorn -c config/unicorn.rb -E production -D

要停止Unicorn,请执行以下命令:

  1. sudo pkill unicorn

Debian 7 (Wheezy)安装Nginx Passenger部署Ruby on Rails

Ruby on Rails是一个流行的快速开发Web框架,允许网页设计师和开发人员使用Ruby编程语言实现功能齐全的动态Web应用程序。 本文介绍使用Passenger部署Ruby on Rails和在Debian 7(Wheezy)上部署Nginx Web服务器。

安装必要软件包

使用以下命令更新系统的存储库数据库和安装的软件包:

  1. apt-get update
  2. apt-get upgrade

执行以下命令来安装Ruby on Rails所需的软件包:

  1. apt-get install wget build-essential ruby1.8 ruby1.8-dev zlib1g-dev libruby1.8 rubygems1.8 libruby libssl-dev libpcre3-dev libcurl4-openssl-dev rake ruby-rack rails

安装Passenger和Nginx

Nginx不支持动态加载模块,所以Phusion Passenger包含了一个Nginx副本,其中编译了Passenger支持。如果您以前是通过Debian仓库安装了Nginx,请使用以下命令删除它:

  1. apt-get remove nginx nginx-full nginx-light nginx-naxsi nginx-common

Phusion托管包含Phusion Passenger的最新版本的存储库。 要将其添加到您的包管理器中,请首先通过运行以下命令来安装Phusion PGP密钥:

  1. apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 561F9B9CAC40B2F7

创建/etc/apt/sources.list.d/passenger.list文件,内容为:

  1. deb https://oss-binaries.phusionpassenger.com/apt/passenger wheezy main

通过运行以下命令启用APT的HTTPS支持:

  1. sudo apt-get install apt-transport-https

更新您的本地包数据库并安装Phusion Passenger:

  1. apt-get update
  2. apt-get install nginx-extras passenger

运行Phusion Passenger安装程序:

  1. passenger-install-nginx-module

你会看Phusion Passenger Nginx的欢迎界面。 按“Enter”继续安装。
安装进程启动一个交互式会话,将指导您完成安装Phusion Passenger的过程。 当提示Nginx安装方法时,我们建议您选择“1”,以允许安装程序自动下载,编译和安装Nginx。 除非你有特定的需求,需要在编译时传递自定义选项到Nginx,这是最安全的方式。 以Nginx的默认安装位置继续安装。

启用Passenger支持并启动Nginx

Nginx已经安装在您的系统上,但您需要启用对Phusion Passenger的支持。 编辑文件/etc/nginx/nginx.conf并取消注释这些行:

  1. passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
  2. passenger_ruby /usr/bin/ruby;

现在可以使用以下命令重新启动Nginx:

  1. service nginx restart

要验证passenger是否已正确安装和启用,您可以运行以下操作:

  1. passenger-memory-stats

如果Passenger正在运行,您应该在“Passenger processes”区块下看到几个正在运行的进程。
Nginx的配置文件位于/etc/nginx/nginx.conf。您需要编辑的文件,以添加对Rails应用程序的支持。 此文件中已配置默认服务器,并且还包含备用虚拟主机和SSL配置的示例。

Ubuntu 12.04使用Apache的ProxyPass配置反向代理

在某些情况下,虽然Apache已经能满足其大多数通用Web服务需求,但其他Web或应用程序服务器更适合某些任务。 幸运的是,很容易配置Apache将某些请求传递到其他Web服务器进程。 这些辅助(或第三)web服务器可以在相同的服务器或单独的节点(可能通过专用网络)上运行。 我们的示例使用lighttpd作为辅助Web服务器,但它们也可以代理HTTP请求到任何Web服务器或应用程序。

激活Proxy模块

按如下内容编辑/etc/apache2/mods-available/proxy.conf:

  1. <IfModule mod_proxy.c>
  2.         #turning ProxyRequests on and allowing proxying from all may allow
  3.         #spammers to use your proxy to send email.
  4.  
  5.         ProxyRequests Off
  6.  
  7.         <Proxy *>
  8.                 AddDefaultCharset off
  9.                 Order deny,allow
  10.                 Allow from all
  11.         </Proxy>
  12.  
  13.         # Enable/disable the handling of HTTP/1.1 "Via:" headers.
  14.         # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
  15.         # Set to one of: Off | On | Full | Block
  16.  
  17.         ProxyVia On
  18. </IfModule>

这将启用代理支持。
下一步,执行如下命令:

  1. a2enmod proxy
  2. a2enmod proxy_http
  3. service apache2 restart

Apache应该能正常重新启动。如果您遇到任何问题,您可以检查/var/log/apache2/下的日志以获取更多信息。

代理一个域名到Lighttpd

我们已经有一个名为“www.firstsite.org”的网站作为正常的虚拟主机在Apache下运行。 我们将使用Apache将对“www.secondsite.org”网站的请求发送到lighttpd,lighttpd运行在端口8080上。 这里是“www.secondsite.org”的配置文件:
/etc/apache2/sites-available/www.secondsite.org:

  1. <VirtualHost *:80>
  2.      ServerAdmin [email protected]
  3.      ServerName secondsite.org
  4.      ServerAlias www.secondsite.org
  5.  
  6.      ProxyPass / http://localhost:8080/
  7.  
  8.      # Uncomment the line below if your site uses SSL.
  9.      #SSLProxyEngine On
  10. </VirtualHost>

ProxyPass指令告诉Apache将此域的所有请求转发到在端口8080上运行的Web服务器。如果我们的目标服务器在另一个服务器上运行,我们可以指定地址。 我们将使用以下命令启用该网站:

  1. a2ensite www.secondsite.org
  2. service apache2 reload

代理指定URL到Lighttpd

如果我们想把http://www.firstsite.org/myapp/的请求转向 lighttpd,我们只需修改其配置文件,如下所示:
/apache2/sites-available/www.firstsite.org:

  1. <VirtualHost *:80>
  2.      ServerAdmin [email protected]
  3.      ServerName firstsite.org
  4.      ServerAlias www.firstsite.org
  5.      DocumentRoot /srv/www/firstsite.org/public_html/
  6.      ErrorLog /srv/www/firstsite.org/logs/error.log
  7.      CustomLog /srv/www/firstsite.org/logs/access.log combined
  8.  
  9.      ProxyPass /myapp http://localhost:8080/
  10. </VirtualHost>

Debian安装Node.js Nginx

Node.js是一个JavaScript平台,可以动态,快速正确响应请求。 JavaScript通常是客户端,浏览器语言如HTML或CSS。 但是,Node.js是一个服务器端的JavaScript平台,与PHP相当。 Node.js经常与其他流行的服务器应用程序(如NGINX或Apache)一起工作。 在本文中,NGINX配置为处理前端,静态文件请求,Node.js配置为处理后端文件请求。

安装配置NGINX

1.安装

  1. apt-get install nginx

2.启动Nginx

  1. service nginx start

3.切换目录到sites-available

  1. cd /etc/nginx/sites-available/

4.新建一个sites-available文件,把example.com替换成你的域名
/etc/nginx/sites-available/example.com:

  1. #Names a server and declares the listening port
  2. server {
  3.   listen 80;
  4.   server_name example.com www.example.com;
  5.  
  6.   #Configures the publicly served root directory
  7.   #Configures the index file to be served
  8.   root /var/www/example.com;
  9.       index index.html index.htm;
  10.  
  11.   #These lines create a bypass for certain pathnames
  12.   #www.example.com/test.js is now routed to port 3000
  13.   #instead of port 80
  14.   location /test.js {
  15.       proxy_pass http://localhost:3000;
  16.       proxy_set_header Host $host;
  17.   }
  18. }

5.切换目录到sites-enabled

  1. cd /etc/nginx/sites-enabled/

6.创建一个软链接指向example sites-available文件

  1. ln -s /etc/nginx/sites-available/example.com

7.删除default软链接

  1. rm default

8.重载nginx配置

  1. service nginx reload

创建目录和HTML Index文件

NGINX现已配置。 但是,example.com server块里涉及的目录和文件需要手动创建。
1.创建/var/www和/var/www/example.com目录

  1. mkdir -p /var/www/example.com

2.切换目录

  1. cd /var/www/example.com

3.创建HTML Index文件
/var/www/example.com/index.html:

  1. <!DOCTYPE html>
  2.   <html>
  3.   <body>
  4.  
  5.   <br>
  6.   <br>
  7.  
  8.   <center>
  9.   <p>
  10.   <b>
  11.   If you have not finished the <a href="https://linode.com/docs/websites/nodejs/nodejs-nginx-debian">guide</a>, the button below will not work.
  12.   </b>
  13.   </p>
  14.   </center>
  15.  
  16.   <center>
  17.   <p>
  18.   The button links to test.js. The test.js request is passed through NGINX and then handled by the Node.js server.
  19.   </p>
  20.   </center>
  21.  
  22.   <center>
  23.   <a href="test.js">
  24.   <button type="button">Go to test.js</button>
  25.   </a>
  26.   </center>
  27.  
  28.   </body>
  29.   </html>

安装Node.js

NGINX现在正在侦听80端口并已能提供服务。 它还配置/test.js请求转到端口3000.接下来的步骤是安装Node.js,然后使用Node.js编写服务器。 新服务器侦听端口3000。
1.安装Node版本管理器

  1. curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash

2.关闭并重新打开终端
3.安装Node.js

  1. nvm install 0.10

4.创建一个Node.js服务器
/var/www/example.com/server.js:

  1. //nodejs.org/api for API docs
  2.   //Node.js web server                         
  3.   var http = require("http"),                           //Import Node.js modules
  4.       url = require("url"),                             
  5.       path = require("path"),
  6.       fs = require("fs");
  7.  
  8.   http.createServer(function(request, response) {       //Create server
  9.   var name = url.parse(request.url).pathname;           //Parse URL
  10.   var filename = path.join(process.cwd(), name);        //Create filename
  11.   fs.readFile(filename, "binary", function(err, file) { //Read file
  12.       if(err) {                                         //Tracking Errors
  13.           response.writeHead(500, {"Content-Type": "text/plain"});
  14.           response.write(err + "n");
  15.           response.end();
  16.           return;
  17.       }
  18.       response.writeHead(200);                          //Header request response
  19.       response.write(file, "binary");                   //Sends body response
  20.       response.end();                                   //Signals to server that
  21.    });                                                  //header and body sent
  22.   }).listen(3000);                                      //Listening port
  23.   console.log("Server is listening on port 3000.")      //Terminal output

5.运行一个新的screen会话

  1. screen

6.回车运行Node.js服务器

  1. node server.js

7.Ctrl+a+d退出screen

创建Test.js文件

NGINX目前侦听端口80,并将任何/test.js请求传递到端口3000。Node.js侦听端口3000并对任何请求响应。 接下来,写一个/test.js文件。
1.创建文件
/var/www/example.com/test.js:

  1. <!DOCTYPE html>
  2.   <html>
  3.   <body>
  4.         
  5.   <center>
  6.   <h2>
  7.   Your Node.JS server is working.
  8.   </h2>
  9.   </center>
  10.                 
  11.   <center>
  12.   <p>
  13.   The below button is technically dynamic. You are now using Javascript on both the client-side and the server-side.
  14.   </p>
  15.   </center>
  16.   <br>
  17.         
  18.   <center>
  19.   <button type="button"
  20.   onclick="document.getElementById(‘sample’).innerHTML = Date()">
  21.   Display the date and time.
  22.   </button>
  23.   <p id="sample"></p>
  24.   </center>
  25.         
  26.   </body>
  27.   </html>

2.浏览器输入IP地址或域名测试NGINX服务器。 点击“Go to test.js”按钮测试Node.js服务器是否正常。 在测试页上,“Display the date and time”按钮将执行javascript的客户端代码段,以返回当前时间。
Node.js和NGINX目前已经能一起正常运行。 根据您的需要你可以更新路由把请求转到任何服务器。 Node.js提供了许多API及工具。 使用Node.js,开发人员可以在客户端或服务器端工作时使用JavaScript语言。

Ubuntu 16.04安装Apache Tomcat

Apache Tomcat是Java Servlet和Java Server Pages技术的开源软件实现。 可以使用OpenJDK tomcat运行你的Java应用。

Apache Tomcat安装

从Ubuntu软件库安装Tomcat:

  1. apt-get install tomcat8

您可能还需要安装tomcat8-docs,tomcat8-examples和tomcat8-admin工具,这些工具提供了文档,测试和允许您基于Web的应用程序管理Tomcat。 您可以使用以下命令安装所有这三个:

  1. apt-get install tomcat8-docs tomcat8-examples tomcat8-admin

如果需要启动,停止或重新启动Tomcat,可以使用以下命令:

  1. systemctl start tomcat8
  2. systemctl stop tomcat8
  3. systemctl restart tomcat8

测试并使用Tomcat

可以在浏览器打开http://example.com:8080/来验证tomcat的安装。 注意,Tomcat监听网络端口8080,默认情况下不接受强制HTTPS连接。 默认情况下,Tomcat配置文件位于/var/lib/tomcat8/conf目录中。
要使用tomcat8-admin web应用程序,请将以下行添加到/var/lib/tomcat8/conf/tomcat-users.xml文件的行之前,替换您自己的用户名和密码 。 如果使用Tomcat管理员,请添加manager的“manager-gui”角色和host-manager应用程序的“admin-gui”角色。
如果您不部署Web应用程序,仅需要从命令行运行应用程序,则不应输入这些行,因为这样做可能会使您的服务器遭受未经授权的登录尝试。
/var/lib/tomcat8/conf/tomcat-users.xml:

  1. <role rolename="manager-gui"/>
  2. <role rolename="admin-gui"/>
  3. <user username="username" password="password" roles="manager-gui,admin-gui"/>

重启以生效配置:

  1. systemctl restart tomcat8

Nginx SSL TLS部署最佳实践

本文介绍nginx在提供HTTPS时使用的一些其他配置选项。 虽然这些功能有助于优化nginx的SSL和TLS,但这不是一个完整对加固nginx的介绍。 确保您的服务器安全的最佳方法是不仅需要正确的配置,而且需要始终遵循最佳安全的设置实践。

关闭nginx版本显示

默认情况下,nginx与任何连接到服务器的客户端共享其版本号。 例如,如果没有找到目录,nginx将返回包含其版本号的404错误。 关闭nginx版本显示使得攻击者无法清楚的得到具体版本,因此可以阻止他进行特定于版本的漏洞攻击。
1.要禁用server_tokens,请打开/etc/nginx/nginx.conf文件。 在http块中,附加或取消注释以下行:

  1. server_tokens       off;

2.保存更改并重启nginx

  1. systemctl restart nginx

启用HTTP/2支持

2010年9月,Google发布了适用于Chrome 6所有版本的的SPDY协议.SPDY目前正在逐步淘汰,以支持HTTP/2。 nginx在2016年5月删除了对Chrome中SPDY的支持。仅在nginx 1.8.x或更早版本中支持SPDY,而从1.9.5开始的版本开始支持HTTP/2。 检查你的nginx版本:
nginx -v
HTTP/2是HTTP标准的新版本,替代HTTP/1.1以减少页面加载时间。 传统上,当用户访问网页时,需要建立单独的HTTP连接以加载每个资源(例如HTML,CSS,JavaScript或图像)。 HTTP/2允许在单个连接上并发请求资源。 服务器还会在将资源发送到客户端之前对其进行压缩,这有利用减少的传输带宽。
1.要启用HTTP/2,请打开nginx SSL虚拟主机配置文件。 根据你安装nginx方式,这可能位于/etc/nginx/sites-enabled/default或/etc/nginx/conf.d/example_ssl.conf。 在“SSL配置”中查找listen行。 如果需要,取消注释以下行,并将http2添加到分号前的结尾。
/etc/nginx/conf.d/example_ssl.conf:

  1. listen       443 ssl http2;

2.保存修改并重启nginx

  1. systemctl restart nginx

3.打开https://tools.keycdn.com/http2-test网站,输入域名测试是否正确支持HTTP/2。

重定向HTTP到HTTPS

Google现在对搜索结果中使用HTTPS加密连接的网站进行优先排名,因此将HTTP请求重定向到HTTPS是提高网页排名的一种可能方法。 然而,在遵循这些步骤之前,请务必研究旧版浏览器可能出现的兼容性问题。
1.打开您的HTTP nginx虚拟主机配置文件,可能位于/etc/nginx/conf.d/default.conf,/etc/nginx/nginx.conf或/etc/nginx/sites-enabled/default,具体取决于您安装nginx的方式。 更改example.com以匹配您的服务器的域名或主机名:
/etc/nginx/conf.d/default.conf:

  1. server_name example.com

2.在server_name行下面附加以下行。
/etc/nginx/conf.d/default.conf:

  1. rewrite        ^ https://$server_name$request_uri? permanent;

3.注释掉(放置#在前面)所有其他行,所以你的配置看起来像这样:
/etc/nginx/conf.d/default.conf:

  1. server {
  2.     listen       80;
  3.     server_name  example.com;
  4.     rewrite      ^ https://$server_name$request_uri? permanent;
  5. }

4.保存更改并重启nginx

  1. systemctl restart nginx

OCSP Stapling

创建在线证书状态协议(OCSP)是为了加速操作系统和浏览器用于检查证书吊销的过程。 例如,当您在Windows计算机上使用Internet Explorer或Google Chrome时,Windows默认配置为检查证书吊销。 在OCSP之前,您的操作系统或浏览器将下载证书吊销列表(CRL)。 CRL已经变得非常大,以至于浏览器厂商正在创建自己的CRL并将其分发给用户。
OCSP的问题是,用户在使用由同一供应商或证书颁发机构提供的证书的网站跳转时,证书颁发机构可以跟踪用户这种行为。 为了防止这种情况,可以启用OCSP stapling。
当启用OCSP stapling时,服务器上的nginx将向客户端发出OCSP请求。 从OCSP服务器收到的响应被添加到nginx对用户的响应中。 这消除了用户连接到OCSP服务器以检查服务器证书的撤销状态的需要。
1.打开您的HTTPS nginx虚拟主机配置文件,可能位于/etc/nginx/conf.d/example_ssl.conf或/etc/nginx/sites-enabled/default,具体取决于您如何安装和配置nginx。 在server块中添加以下行:
/etc/nginx/conf.d/example_ssl.conf:

  1. ssl_stapling on;
  2. ssl_stapling_verify on;
  3. ssl_trusted_certificate /etc/ssl/nginx/ca.pem;

2.保存更改并重启nginx

  1. systemctl restart nginx

3.打开https://www.ssllabs.com/ssltest/,检查OCSP stapling是否正确开启。

强制HTTP使用HTTPS(HSTS)

Google Chrome,Mozilla Firefox,Opera和Safari目前支持HSTS标头。 HSTS用于强制浏览器仅使用安全加密连接进行连接。 这意味着您的网站将无法再通过HTTP访问。 当HSTS启用并且有效的HSTS头存储在用户浏览器缓存中时,如果显示由不受信任的证书颁发机构颁发的自签名,过期或SSL证书,则用户将无法访问您的网站。 用户也将无法绕过任何证书警告,除非您的HSTS标头过期或浏览器缓存已清除。
将所有流量从HTTP重定向到HTTPS后,您可能需要允许用户仅使用HTTPS进行连接。 在启用HSTS之前,请确保您了解与旧版浏览器的兼容性的潜在影响。
如果您希望用户能够通过HTTP访问您的网站,请不要按照这些步骤操作!
1.打开您的nginx HTTPS虚拟主机配置文件。 这可能位于/etc/nginx/sites-enabled/default或/etc/nginx/conf.d/example_ssl.conf。 在您的server块中附加以下行:
/etc/nginx/conf.d/example_ssl.conf:

  1. add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

max-age属性以秒为单位设置此标头的到期日期; 在上述配置中,报头将在1年后过期。 您可以将其配置为更长或更短,但对Qualys测试,少于180天的时间被认为太短了。 includeSubdomains参数在所有子域上强制执行HSTS。
2.保存更改并重启nginx

  1. systemctl restart nginx

3.打开https://www.ssllabs.com/ssltest/,测试配置是否生效。

禁用内容嗅探

内容嗅探允许浏览器检查字节流以便“猜测”其内容的文件格式。 它通常用于帮助不能正确识别其Web内容的MIME类型的网站,但它也导致出现了跨站点脚本和其他攻击的漏洞。 要禁用内容嗅探,请在server块中的nginx SSL配置文件中添加以下行:
/etc/nginx/conf.d/example_ssl.conf:

  1. add_header X-Content-Type-Options nosniff;

禁用或限制嵌入

HTTPS响应头X-Frame-Options可以指定页面是否能够在框架,iframe或对象中呈现。 如果未设置,您的网站的内容可能会在clickjacking攻击中嵌入到其他网站的HTML代码中。 要禁用嵌入内容,请将以下行添加到server块中的SSL配置文件中:
/etc/nginx/conf.d/example_ssl.conf:

  1. add_header X-Frame-Options DENY;

如果您希望限制嵌入而不是完全禁用它,则可以用SAMEORIGIN替换DENY。 这将允许您在框架中使用您的页面,只要是在同一网站中。

创建自定义Diffie-Hellman密钥交换

我们使用4096位RSA私钥来签署Diffie-Hellman密钥交换,但是Diffie-Hellman的默认参数只指定1024位,通常使其成为SSL密码套件中最弱的链路。 我们应该为密钥交换生成自己的自定义参数,以提供更高的安全性。
1.切换到certs目录

  1. cd /etc/ssl/certs

2.为TLS握手创建自定义参数。 这里我们将使用4096位密钥来实现高安全性:

  1. openssl dhparam -out dhparam.pem 4096

3.通过将以下行添加到server块中的nginx SSL配置文件中来指定新参数:
/etc/nginx/conf.d/example_ssl.conf:

  1. ssl_dhparam /etc/ssl/certs/dhparam.pem;

4.保存更改并重启nginx

  1. systemctl restart nginx

测试配置

你的/etc/nginx/conf.d/example_ssl.conf现在应该看起来类似于:
/etc/nginx/conf.d/example_ssl.conf:

  1. # HTTPS server
  2. #
  3. server {
  4.     listen       443 ssl http2;
  5.         
  6.     add_header   Strict-Transport-Security "max-age=31536000; includeSubdomains";
  7.     add_header   X-Content-Type-Options nosniff;
  8.     add_header   X-Frame-Options DENY;
  9.         
  10.     server_name  example.com;
  11.  
  12.     ssl_certificate      /etc/ssl/nginx/nginx.crt;
  13.     ssl_certificate_key  /etc/ssl/nginx/server.key;
  14.  
  15.     ssl_session_cache shared:SSL:10m;
  16.     ssl_session_timeout  5m;
  17.  
  18.     ssl_ciphers  "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH !RC4";
  19.     ssl_prefer_server_ciphers   on;
  20.  
  21.     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  22.  
  23.     ssl_stapling on;
  24.     ssl_stapling_verify on;
  25.     ssl_trusted_certificate /etc/nginx/ca.pem;
  26.  
  27.     ssl_dhparam /etc/ssl/certs/dhparam.pem;
  28.  
  29.     location / {
  30.         root   /usr/share/nginx/html;
  31.         index  index.html index.htm;
  32.     }
  33. }

打开https://www.ssllabs.com/ssltest/,测试SSL。

Ubuntu 14.04使用Nginx uWSGI部署Django应用

Django是一个高级的Python Web框架,Django的主要目的是简便、快速的开发数据库驱动的网站。本文介绍了在Ubuntu 14.04上使用uWSGI和nginx部署Django应用程序。

安装nginx, Python工具和uWSGI

1.安装nginx,SQLite Python bindings和管理Python工具所需的系统包:

  1. sudo apt-get install build-essential nginx python-dev python-pip python-sqlite sqlite

2.安装virtualenv和virtualenvwrapper:

  1. sudo pip install virtualenv virtualenvwrapper

virtualenv和virtualenvwrapper是创建隔离的Python环境的工具。 它们有助于更好地管理应用程序依赖性,版本和权限。 要使virtualenvwrapper正常工作,请运行以下命令:

  1. echo "export WORKON_HOME=~/Env" >> ~/.bashrc
  2. echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc

3.在当前会话中激活virtualenvwrapper:

  1. source ~/.bashrc

4.使用pip安装uWSGI:

  1. sudo pip install uwsgi

配置Django应用程序示例

1.确保您在django用户的主目录中并为应用程序创建虚拟环境:

  1. cd /home/django && mkvirtualenv sample

执行此命令后,您的提示将更改为(sample)[email protected]:~$表示您正在使用sample虚拟环境。 要退出虚拟环境,请输入deactivate。
2.安装Django framework

  1. pip install Django

3.创建新的Django应用程序示例,位于/home/django/sample:

  1. django-admin.py startproject sample

4.切换到Django应用程序的目录并初始化SQLite数据库:

  1. cd ~/sample && ./manage.py migrate

5.当使用nginx运行Django时,需要配置Django将所有静态资源放在应用程序的静态文件夹中。 在settings.py中指定其位置:

  1. echo ‘STATIC_ROOT = os.path.join(BASE_DIR, "static/")’ >> sample/settings.py

6.运行以下命令将所有静态资源移动到上述目录中:

  1. ./manage.py collectstatic

7.启动开发服务器以测试示例应用程序:

  1. ./manage.py runserver 0.0.0.0:8080

请在您的浏览器中访问http://example.com:8080,以确认示例应用程序已正确设置并正常工作。 您应该会看到Django测试页。

配置uWSGI

1.创建目录以存放uWSGI配置

  1. sudo mkdir -p /etc/uwsgi/sites

2.创建配置文件sample.ini:
/etc/uwsgi/sites/sample.ini:

  1. [uwsgi]
  2. project = sample
  3. base = /home/django
  4.  
  5. chdir = %(base)/%(project)
  6. home = %(base)/Env/%(project)
  7. module = %(project).wsgi:application
  8.  
  9. master = true
  10. processes = 2
  11.  
  12. socket = %(base)/%(project)/%(project).sock
  13. chmod-socket = 664
  14. vacuum = true

3.为uWSGI创建Upstart job:
/etc/init/uwsgi.conf:

  1. description "uWSGI"
  2. start on runlevel [2345]
  3. stop on runlevel [06]
  4. respawn
  5.  
  6. env UWSGI=/usr/local/bin/uwsgi
  7. env LOGTO=/var/log/uwsgi.log
  8.  
  9. exec $UWSGI –master –emperor /etc/uwsgi/sites –die-on-term –uid django –gid www-data –logto $LOGTO

4.启动uwsgi服务

  1. sudo service uwsgi start

配置Nginx

1.删除默认的nginx站点配置:

  1. sudo rm /etc/nginx/sites-enabled/default

2.为您的Django应用程序创建一个nginx站点配置文件:
/etc/nginx/sites-available/sample:

  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.  
  5.     location = /favicon.ico { access_log off; log_not_found off; }
  6.     location /static/ {
  7.         root /home/django/sample;
  8.     }
  9.  
  10.     location / {
  11.         include         uwsgi_params;
  12.         uwsgi_pass      unix:/home/django/sample/sample.sock;
  13.     }
  14. }

3.创建指向nginx sites-enabled目录的符号链接以启用站点配置文件:

  1. sudo ln -s /etc/nginx/sites-available/sample /etc/nginx/sites-enabled

4.检查nginx配置并重新启动它:

  1. sudo service nginx configtest && sudo service nginx restart

5.现在,您应该可以通过浏览器输入你的域名或IP地址来访问您的Django应用程序。