Nginx使用记录

配置常看法释:javascript

########### 每一个指令必须有分号结束。#################
#user administrator administrators;  #配置用户或者组,默认为nobody。
worker_processes  2; #容许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址,默认存在logs/nginx.pid
error_log logs/error.log error;  #制定日志路径,级别。这个设置能够放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路链接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络链接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大链接数,默认为512
}


http {
    include       mime.types;    #文件扩展名与文件类型映射表
    default_type  application/octet-stream;    #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志        
    log_format myFormat '$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 myFormat;  #combined为日志格式的默认值

    sendfile        on;    #容许sendfile方式传输文件,默认为off,能够在http块,server块,location块。
    #sendfile_max_chunk 0;  #每一个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;    #链接超时时间,默认为75s,能够在http,server,location块。

    #upstream mysvr {            #服务器列表,用于负载均衡等
      #server 127.0.0.1:7878;
      #server 192.168.10.121:3333 backup;  #热备
    #}

    #gzip  on;
server {
    listen       80;
        server_name  www.aaa.con aaa.con; #多个站点使用空格隔开
        location / {
         proxy_pass   http://www.aaa.con:8087/proj1/;
        }
     location /proj1/ {
         proxy_pass   http://www.aaa.con:8087/proj1/;
    }
}
 
 
server {
  listen 80; 
  server_name www.bbb.con bbb.con; 
  location / { 
    proxy_pass http://www.aaa.con:8087/proj2/;
  }

  location /proj2/ {
    proxy_pass http://www.aaa.con:8087/proj2/;
 
 
  }
 }
}

注意:以上80端口能够映射到两个地址,多个地址也同样html

这段配置的意思是访问www.aaa.com或者aaa.com的请求,会被nginx映射到http://www.aaa.con:8087/proj1/;而访问www.bbb.com或者bbb.com的请求,会被映射到http://www.aaa.con:8087/proj2/。多配置location /proj1/的缘由是避免CSS/js等在html中设置了项目名路径的资源由于nginx的反向代理形成丢失工程名而没法访问到资源。
java

      这样,咱们就可以在一台机器上发布针对若干个域名的WEB服务了。nginx

 

注:有些应用必须设置proxy_set_header属性,不然没法正常使用(好比使用dwr框架的javaee应用),示例:git

 

server {  
    listen       80;  
    server_name  *.a.com;  
    location / {  
        proxy_pass http://localhost:8080/projectA/;  
        proxy_set_header   Host    $host;  
        proxy_set_header   X-Real-IP   $remote_addr;  
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
    }  
} 

 

缘由以下:github

 

nginx为了实现反向代理的需求而增长了一个ngx_http_proxy_module模块。其中proxy_set_header指令就是该模块须要读取的配置文件。在这里,全部设置的值的含义和http请求同中的含义彻底相同,除了Host外还有X-Forward-For。
        Host的含义是代表请求的主机名,由于nginx做为反向代理使用,而若是后端真是的服务器设置有相似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,若是反向代理层的nginx不重写请求头中的host字段,将会致使请求失败【默认反向代理服务器会向后端真实服务器发送请求,而且请求头中的host字段应为proxy_pass指令设置的服务器】。
        同理,X_Forward_For字段表示该条http请求是有谁发起的?若是反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为全部的请求都来在反向代理服务器,若是后端有防攻击策略的话,那么机器就被封掉了。所以,在配置用做反向代理的nginx中通常会增长两条配置,修改http的请求头:
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;


这里的$http_host和$remote_addr都是nginx的导出变量,能够再配置文件中直接使用。若是Host请求头部没有出如今请求头中,则$http_host值为空,可是$host值为主域名。所以,通常而言,会用$host代替$http_host变量,从而避免http请求中丢失Host头部的状况下Host不被重写的失误。

 

使用rewrite能够将80端口映射到443去小程序

 

#80 rewrite to 443
    server {
    listen 80; #监听的端口
    server_name xxx.ttt.com;   #监听的域名,多个使用空格隔开
    rewrite ^(.*) https://$server_name$1 permanent;  #80映射到443端口
    }
    server {
        listen       443;
        server_name  localhost;
    ssl    on;
    ssl_certificate    xxx.ttt.com_bundle.crt;
    ssl_certificate_key    xxx.ttt.com.key;
    ssl_session_timeout    20m;
    #ssl_protocols    SSLv3 TLSv1;
    #ssl_ciphers    HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
    ssl_prefer_server_ciphers    on;
     
    location / {
            proxy_pass  https://xxx.ttt.com;
        }

 

安装为Windows 服务:后端

需使用开源的winsw工具https://github.com/kohsuke/winsw,下载对应的winsw。服务器

注意:安装不成功的时候,多是因为没有安装.net framework.网络

参照:http://www.cnblogs.com/edisonchou/p/4126742.html

(4)每次以cmd方式启动Nginx服务不符合实际要求,因而咱们想到将其注册为Windows服务,并设置为自动启动模式。这里,咱们使用一个不错的小程序:“Windows Service Wrapper”,将nginx.exe注册为Windows服务,具体的步凑以下:

  ①下载最新版的 Windows Service Wrapper 程序,好比我下载的名称是 "winsw-1.8-bin.exe"(本文底部有下载地址),而后把它命名成你想要的名字(好比: "nginx-service.exe",固然,你也能够不更名)

  ②将重命名后的 nginx-service.exe 复制到 nginx 的安装目录(好比,我这里是 "D:\Servers\nginx-1.4.7")

  ③在同一个目录下建立一个Windows Service Wrapper 的XML配置文件,名称必须与第一步重命名时使用的名称一致(好比我这里是 "nginx-service.xml",  若是,你没有重命名,则应该是 "winsw-1.8-bin.xml"),这个XML的内容以下:

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>Nginx Service</name>
<description>High Performance Nginx Service</description>
<executable>D:\Servers\nginx-1.4.7\nginx.exe</executable>
<logpath>D:\Servers\nginx-1.4.7\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p D:\Servers\nginx-1.4.7</startargument>
<stopargument>-p D:\Servers\nginx-1.4.7 -s stop</stopargument>
</service>
复制代码

  ④在命令行下执行如下命令,以便将其注册成Windows服务:nginx-service.exe install

  ⑤接下来就能够在Windows服务列表看到Nginx服务了,这里咱们能够将其设置为自动启动了:

  (5)总结:在Windows环境中,要对外提供的Windows服务通常都要将其启动类型设置为自动

相关文章
相关标签/搜索