1. 程式人生 > >Linux——實現網站釋出伺服器

Linux——實現網站釋出伺服器

1DNS工作原理
1、 遞迴式
2、 迭代式

網頁釋出伺服器

1.檢視系統的服務程式的狀態:
service name status
啟動服務:
service name start
關閉服務:
service name stop


2
Linuxhtml預設存放路徑:
/var/www/html

http請求報頭:


HTTP應答報文段:


網站釋出伺服器程式碼 httpd.c:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/stat.h>

void send_404(int c)
{
	char sendbuff[1024] = {0};
	strcpy(sendbuff, "HTTP/1.1 404 Not Found\r\n");
	strcat(sendbuff, "Server: myhttpd/1.0\r\n");
	strcat(sendbuff, "Content-Length: 14\r\n");
	strcat(sendbuff, "Content-Type: text/html;charset=gbk\r\n");
	strcat(sendbuff, "\r\n");
	strcat(sendbuff, "Page Not Found");

	send(c, sendbuff, strlen(sendbuff), 0);

}

void senderr(int c)
{
	send_404(c);
}

void send_success(int c, int fd)
{
	struct stat st;
	fstat(fd, &st);

	char sendbuff[1024] = {0};
	strcpy(sendbuff, "HTTP/1.1 200 OK\r\n");
	strcat(sendbuff, "Server: myhttpd/1.0\r\n");

	strcat(sendbuff, "Content-Length: ");
	sprintf(sendbuff+strlen(sendbuff), "%d", st.st_size);
	strcat(sendbuff, "\r\n");

	strcat(sendbuff, "Content-Type: text/html;charset=UTF-8\r\n");
	strcat(sendbuff, "\r\n");

	send(c, sendbuff, strlen(sendbuff), 0);

	//fa song wen jian nei rong
	while(1)
	{
		char buff[10] = {0};
		int n = read(fd, buff, 9);
		if(n <= 0)
		{
			break;
		}
		send(c, buff, n, 0);
	}

	close(fd);	
}

void main()
{
	int sockfd = socket(AF_INET, SOCK_STREAM, 0);
	assert(sockfd != -1);

	struct sockaddr_in ser, cli;
	memset(&ser, 0, sizeof(ser));
	ser.sin_family = AF_INET;
	ser.sin_port = htons(80);
	ser.sin_addr.s_addr = inet_addr("192.168.1.120");

	int res = bind(sockfd, (struct sockaddr*)&ser, sizeof(ser));
	assert(res != -1);

	listen(sockfd, 5);

	while(1)
	{
		int len = sizeof(cli);
		int c = accept(sockfd, (struct sockaddr*)&cli, &len);
		assert(c != -1);
		printf("one client link\n");

		while(1)
		{
			char buff[1024] = {0};
			int n = recv(c, buff, 1023, 0);
			if(n <= 0)
			{
				break;
			}
			//printf("%s\n", buff);
			char *p = strtok(buff, " ");
			if(p == NULL)
			{
				senderr(c);
				continue;
			}
			p = strtok(NULL, " ");
			if(p == NULL)
			{
				senderr(c);
				continue;
			}

			char path[128] = "/var/www/html";
			strcat(path, p);
			int fd = open(path, O_RDONLY);
			if(fd == -1)
			{
				send_404(c);
				continue;
			}

			//cheng gong, fa song ying da bao wen duan he wen jian nei rong
			send_success(c, fd);
		}

		close(c);
		printf("one client unlink\n");
	}
}

相關推薦

Linux——實現網站釋出伺服器

1、DNS工作原理1、 遞迴式2、 迭代式 網頁釋出伺服器 1.檢視系統的服務程式的狀態:service name status啟動服務:service name start關閉服務:service name stop 2、Linux上html預設存放路徑:/var

Linux實現兩個伺服器上兩個資料庫的表同步

最近遇到一個問題,需要將一個伺服器上的oracle資料庫中的表格的資料,匯入到另外一個伺服器上的mysql資料庫中。由於兩個伺服器上使用的是Linux系統,並且對此係統不是很熟悉,解決起來很是艱難,下面將我想到的其中一個辦法寫下來,跟大家分享一下: 第一步:在oracle伺服器上,建立一個目錄。

基於linux實現keepalived高可用的集群網站架構

基於linux實現keepalived高可用的集群網站架構模擬場景:隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,目前業務已經通過集群LVS架構可做到隨時拓展,後端節點已經通過集群技術(ldirectord)保障了可用性,但對於前端負載均衡器來說,是個比較大的

Linux 安裝FastDFS圖片伺服器以及配合nginx實現圖片檢視

各位同學,今天我們來學習一下如何安裝FastDFS圖片伺服器,首先我們先來介紹一下什麼是圖片伺服器。 1.什麼是FastDFS FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等

linux centos7 下Nginx伺服器實現URL重寫去掉index.php方法,跟Apache還是不一樣的。

想要的URL :http://localhost/Admin/ 而自己的是http://localhost/index.php/Admin/ 方法: 在nginx配置檔案nginx.conf中新增: location / {   if ( !e $request_filename )

java實現 連線遠端伺服器 執行Linux命令 並獲取 執行返回的結果

情景:要通過java連線伺服器,並執行指令碼命令 得到 返回的結果 package com.ideal.openapi.util; import com.jcraft.jsch.*; import org.slf4j.Logger; import org.slf4j.LoggerFacto

手摸手帶你部署git伺服器實現自動釋出程式碼

前段趁著活動買了個騰訊雲伺服器,一直沒抽時間去折騰,最近才開始部署了一個自己專屬的git倉庫,實現程式碼自動釋出部署功能。(我也想成為努力向上,積極進取的有志青年啊!)文章的內容基本都是參考自谷歌搜尋,然後按我的思路重新整理一遍,既是為了分享也是為了鞏固知識。 我也是第一次折騰伺服器,前期部署就

Linux 網路程式設計——併發伺服器的三種經典實現模型

伺服器設計技術有很多,按使用的協議來分有 TCP 伺服器和 UDP 伺服器,按處理方式來分有迴圈伺服器和併發伺服器。 迴圈伺服器與併發伺服器模型 在網路程式裡面,一般來說都是許多客戶對應一個伺服器(多對一),為了處理客戶的請求,對服務端的程式就提出了特殊的要求。

Linux epoll 實現高效能 HTTP 伺服器

用 Linux epoll 實現高效能 HTTP 伺服器 為了程式碼的整潔性,本文章所介紹功能將使用 C++ 實現。實際使用中可轉為 C 語言使用。 此專案只能在Linux下使用,windows請繞道。 專案概括 本專案是使用 Linux epoll 實現的一個簡單

Mac與Linux 實現nginx的安裝 與 訪問虛擬機器裡的nginx 實現的反向代理網站及檔案目錄

一             現在主要實現的是 nginx   反向代理功能,      首先 , 先在虛擬機器裡的系統裝 nginx  Note:我用的是Cent

網站釋出伺服器後cookie無法登入問題

1.網站在本機測試時登入正常,釋出到伺服器後,在登入頁,輸入賬號密碼,點選登入失效,頁面不跳轉。 本來以為是IE11 edge瀏覽器不支援cookie導致的,但是按照網上各種方法都沒有解決! 最後發現,原來是伺服器時間比正常時間晚了一天導致的,修改伺服器時間日期後,解決登入

linux下構建svn伺服器實現專案自動部署

在Linux系統中搭建svn服務所需要用到的軟體叫做subversion,可以通過yum來進行安裝. svn服務是為了實現協同工作,即一個團隊公眾開發一個專案而不導致程式碼混亂,不會出現今天我修改的程式碼在不通知同事的情況下又被他修改了.

伺服器】把個人電腦打造成釋出網站伺服器

個人電腦打造伺服器步驟: 動態域名解析器有很多嗎,筆者在這裡主要講解“花生殼”動態域名解析器的用法 花生殼下載安裝 (參考資料裡面有下載地址) (安裝完成後的效果圖) 申請註冊花

Linux下簡易web伺服器實現

今天突然對http的web伺服器感興趣了,就研究了一下,發現linux下的web伺服器就是一個socket程式設計的伺服器端,而我們用的ie,chrome等瀏覽器就是客戶端,只不過傳送和接收資料按照http網頁格式,就相當於對資料進行了封裝,相當於加上了檔案頭和檔案

Linux客戶端與伺服器相互實現聊天功能

這個實現方法只能夠單執行緒聊天,recv是阻塞的,你發一句我回一句,必須一來一回,後文會記錄多執行緒實現聊天 客戶端程式碼如下 #include <stdio.h> #include <stdlib.h> #include <string.h

Linux C UDP Socket實現客戶與伺服器簡單通訊

在linux平臺下用c語言udp協議實現客戶與伺服器的簡單通訊與封裝的實現 一、伺服器端 1、新建CreateServer.c和CreateServer.h檔案,伺服器的建立程式碼在此實現,程式中封裝了建立TcpSocket和UdpSocket伺服器的方法,

linux配置Jexus釋出asp.net網站

linux配置Jexus 博文如上,寫得很詳細了,具體操作下來是完成可以成功的。 Ubuntu14.10實測。 我這裡主要分享的是配置釋出網站。 照著預設安裝的樣式的話,Jexus預設安裝在/usr/jexus/ 這個路徑下,ls一下可以看到很多的東西。 我們釋出一個

Linux + C + Epoll實現高併發伺服器(執行緒池 + 資料庫連線池)

一, 背景        先說下我要實現的功能,server端一直在linux平臺下面跑,當客戶端有請求過來的時候server端接受到請求,拿到客戶端的資料,根據拿到的資料做出相應的處理,得到處理的結果直接把結果資料傳送給客戶端。這樣一個連線的請求結束,我的不

linux下dns主從伺服器實現

案例環境: 主域名伺服器:ns1.zdj.com,172.17.0.142 從域名伺服器:ns2.zdj.com,172.17.0.37 兩臺伺服器均能夠提供 zdj.com 區域的域名解析主域名伺服

linux下rsync+inotify實現兩臺伺服器檔案實時同步

假設兩個伺服器: 192.168.0.1 源伺服器  有目錄 /opt/test/ 192.168.0.2 目標伺服器  有目錄 /opt/bak/test/ 實現的目的就是保持這兩個伺服器某個檔案目錄保持實時同步 實現方式: 通過rsync+inotify-too